写了一个大数加法类。内部计算是10000进制的,能省些空间,但是输出的时候要注意补0 这个版本的代码只支持正数相加。 #include <iostream> using namespace std; struct _cBigNum { const static int def_size = 20; const static int def_jw = 10000; //10000进一 int cvNum[def_size]; //0-n从低位到高位 int cvSize; _cBigNum(){ clean(); } void clean() { cvSize = 0; for( int i = 0;i < def_size;++i ) cvNum[i] = 0; } _cBigNum& operator=( const _cBigNum& obj ) { clean(); cvSize = obj.cvSize; for( int i = 0;i < cvSize;++i ) cvNum[i] = obj.cvNum[i]; return *this; } _cBigNum& operator=( unsigned long num ) { clean(); while( num ) { cvNum[ cvSize++ ] = num % def_jw; num /= def_jw; } return *this; } _cBigNum operator+( const _cBigNum& obj ) { _cBigNum temp; temp.cvSize = cvSize > obj.cvSize ? cvSize : obj.cvSize; int jw = 0; //进位 for( int i = 0;i < temp.cvSize;++i ) { temp.cvNum[i] = jw + cvNum[i] + obj.cvNum[i]; jw = temp.cvNum[i] / def_jw; temp.cvNum[i] %= def_jw; } if( jw ) temp.cvNum[ temp.cvSize++ ] = jw; return temp; } void out() { if( cvSize-1 >= 0 ) cout << cvNum[cvSize-1]; for( int i = cvSize-2;i >= 0;--i ) { //输出补0 for( int j = 1000;j > 1;j /= 10 ) { if( cvNum[i] < j ) cout << 0; } cout << cvNum[i]; } } }; int main() { _cBigNum a,b; a = 0x7fffffff; b = 0; for( int i = 0;i < 100;++i ) { b = a + b; b.out(); cout << endl; a = a + b; a.out(); cout << endl; } system("pause"); return 0; }