posts - 13, comments - 0, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

高精度模板

Posted on 2009-03-08 11:36 杜仲当归 阅读(601) 评论(0)  编辑 收藏 引用
class BigNum
{
private:
    
int M;
    
int numlen ( int n )
    
{
        
int ret = 0;
        
while ( n )
        
{
            ret 
++;
            n 
/= 10;
        }

        
if ( ret == 0 )
            ret 
= 1;
        
return ret;
    }

public:
    
int l[50];
    
int len;
    BigNum ()
    
{
        M 
= 100000000;
        memset ( l, 
0sizeof ( l ) );
        len 
= 1;
    }

    BigNum 
operator = ( int x )
    
{
        len 
= 0;
        
while ( x )
        
{
            l[
++ len] = x % M;
            x 
/= M;
        }

        
return *this;
    }

    
void copy ( BigNum &b )
    
{
        len 
= b.len;
        memcpy ( l, b.l, 
sizeof ( l ) );
    }

    
void plus ( BigNum &b )
    
{
        
int maxlen = b.len < len ? len : b.len;
        
int i, c;
        
for ( i = 1, c = 0; i <= maxlen; i ++ )
        
{
            l[i] 
+= b.l[i] + c;
            
if ( l[i] >= M )
                l[i] 
-= M, c = 1;
            
else
                c 
= 0;
        }

        
if ( c )
            l[i] 
= 1, maxlen ++;
        len 
= maxlen;
    }

    
void print ()
    
{
        
int i;
        
for ( i = len; i >= 1; i -- )
        
{
            
if ( i == len )
                fout 
<< l[i];
            
else
            
{
                
int zerolen = 8 - numlen ( l[i] );
                
int j;
                
for ( j = 0; j < zerolen; j ++ )
                    fout 
<< 0;
                fout 
<< l[i];
            }

        }

        fout 
<< endl;
    }

}
;

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