随笔 - 87  文章 - 279  trackbacks - 0
<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

潜心看书研究!

常用链接

留言簿(19)

随笔分类(81)

文章分类(89)

相册

ACM OJ

My friends

搜索

  •  

积分与排名

  • 积分 - 214376
  • 排名 - 116

最新评论

阅读排行榜

评论排行榜

 

#include  < iostream >
#include 
< string >
#include 
< algorithm >
using   namespace  std;


int  str_compare( string  a,  string  b) 
{
    
int  rtn;
    
int  aLen  =  a.length();
    
int  bLen  =  b.length();
    
if  (aLen  >  bLen)  {
        rtn 
=   1 ;
    }
  else   if  (aLen  <  bLen)  {
        rtn 
=   - 1 ;
    }
  else   {
        
if  (a  ==  b)  {
            rtn 
=   0 ;
        }
  else   if  (a  >  b)  {
            rtn 
=   1 ;
        }
  else   if  (a  <  b)  {
            rtn 
=   - 1 ;
        }

    }

    
return  rtn;
}


string  str_add( string  a,  string  b)
{
    
string  c, c1;
    
int  p, q;
    
int  i;
    
int  tmp;
    
bool  flag;
    
if  (a.length()  <  b.length())  {
        swap(a, b);
    }

    p 
=  a.length() - 1 ;
    q 
=  b.length() - 1 ;
    flag 
=   false ;
    
while  (q  >=   0 {
        tmp 
=  a[p -- +  b[q -- - 96 ;
        
if  (flag)  {
            tmp
++ ;
        }

        flag 
=   false ;
        
if  (tmp  >=   10 {
            tmp 
-=   10 ;
            flag 
=   true ;
        }

        c 
+=   char (tmp + 48 );
    }

    
while  (p  >=   0 {
        tmp 
=  a[p -- -   48 ;
        
if  (flag)  {
            tmp
++ ;
        }

        flag 
=   false ;
        
if  (tmp  >=   10 {
            tmp 
-=   10 ;
            flag 
=   true ;
        }

        c 
+=   char (tmp + 48 );
    }

    
if  (flag)  {
        c 
+=   ' 1 ' ;
    }

    
for  (i = c.length() - 1 ; i >= 0 ; i -- {
        c1 
+=  c[i];
    }

    
return  c1;
}


// a > b
string  str_minus( string  a,  string  b) 
{
    
if  (str_compare(a,b)  ==   - 1 {
        
return   " -1 " ;
    }

    
string  c, c1;
    
int  i;
    
int  p  =  a.length()  -   1 ;
    
int  q  =  b.length()  -   1 ;
    
while  (q  >=   0 {
        
if  (a[p]  <  b[q])  {
            a[p
- 1 ] -- ;
            c 
+=   char (a[p]  -  b[q]  +   58 );
        }
  else   {
            c 
+=   char (a[p]  -  b[q]  +   48 );
        }

        p
-- ;
        q
-- ;
    }

    
while  (p  >=   0 {
        
if  (a[p]  <   ' 0 ' {
            a[p
- 1 ] -- ;
            c 
+=   char (a[p]  +   10 );
        }
  else   {
            c 
+=  a[p];
        }

        p
-- ;
    }

    i 
=  c.length() - 1 ;
    
while  (c[i]  ==   ' 0 '
        i
-- ;
    }

    
for  ( ; i >= 0 ; i -- {
        c1 
+=  c[i];
    }

    
if  (c1.length()  ==   0 {
        c1 
+=   ' 0 ' ;
    }

    
return  c1;
}


string  str_multiply( string  a,  string  b) 
{
    
if  (str_compare(a, b)  ==   - 1 {
        swap(a, b);
    }
    
    
string  c, c1;
    
string  bb  =  b, aa  =  a;
    
int  i, j, k, bit;
    
int  p;
    
int  tmp;
    p 
=  bb.length() - 1 ;
    
for  (i = 0 ; i < b.length(); i ++ {
        b[i] 
=  bb[p -- ];
    }

    p 
=  aa.length() - 1 ;
    
for  (i = 0 ; i < a.length(); i ++ {
        a[i] 
=  aa[p -- ];
    }

    
for  (i = 0 ; i < b.length(); i ++ {
        bit 
=   0 ;
        
for  (j = 0 ; j < a.length(); j ++ {
            
if  (i + >=  c.length())  {
                tmp 
=  (b[i]  -   48 *  (a[j]  -   48 +  bit;
            }
  else   {
                tmp 
=  (b[i]  -   48 *  (a[j]  -   48 +  bit  +  (c[i + j]  -   48 );
            }

            bit 
=  tmp  /   10 ;
            tmp 
=  tmp  %   10 ;
            
if  (i + >=  c.length())  {
                c 
+=   char (tmp + 48 );
            }
  else   {
                c[i
+ j]  =   char (tmp + 48 );
            }

        }

        
if  (bit  >   0 {
            k 
=  i  +  j;
            
if  (k  >=  c.length())  {
                c 
+=   char (bit + 48 );
            }
  else   {            
                
while  (bit  !=   0 {
                    tmp 
=  bit  +  (c[k]  -   48 );
                    bit 
=  tmp  /   10 ;
                    tmp 
=  tmp  %   10 ;
                    
if  (k  >=  c.length())  {
                        c 
+=   char (tmp + 48 );
                    }
  else   {
                        c[k
++ =   char (tmp + 48 );
                    }

                }

            }

        }

    }

    
for  (i = c.length() - 1 ; i >= 0 ; i -- {
        c1 
+=  c[i];
    }

    
return  c1;
}

// a < b 精确到100位
string  str_divide( string  a,  string  b) 
{
    
string  c;
    
string  y, tmp, tmp3;
    
int  i;
    
int  flag;
    
int  last;
    
if  (str_compare(a, b)  ==   1 {
        swap(a, b);
    }

    a 
+=   ' 0 ' ;
    
for  (i = 0 ; i < 100 ; i ++ {
        
if  (str_compare(a, b)  ==   - 1 {
            a 
+=   ' 0 ' ;
            c 
+=   ' 0 ' ;
        }
  else   {
            c 
+=   ' 1 ' ;
            last 
=  c.length()  -   1 ;
            tmp 
=  b;
            tmp3 
=  str_minus(a, tmp);
            
while  (str_compare(tmp3, b)  !=   - 1 {
                tmp 
=  str_add(tmp, b);
                c[last]
++ ;
                tmp3 
=  str_minus(a, tmp);
            }

            
if  (str_compare(tmp3,  " 0 " ==   0 {
                
break ;
            }

            a 
=  tmp3;
            a 
+=   ' 0 ' ;
        }

    }

    
return  c;
}
posted on 2006-05-07 16:13 阅读(925) 评论(0)  编辑 收藏 引用 所属分类: 数据结构与算法

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理