string BigNumMultipy( string str1, string str2 ) { int len1 = str1.length(); int len2 = str2.length(); vector< int > res( len1 + len2, 0 ); reverse( str1.begin(), str1.end() ); reverse( str2.begin(), str2.end() ); int i, j, k; for( i = 0; i < len1; i++ ) { for( j = 0; j < len2; j++ ) { res[i+j] += ( str1[i] - '0' ) * ( str2[j] - '0' ); } } for( k = 0; k < len1 + len2; k++ ) { if( res[k] >= 10 ) { res[k+1] += res[k] / 10; //这两句顺序一定要正确,先算进位,然后才是本位。 res[k] %= 10; } } string resStr = ""; for( k = 0; k < len1 + len2; k++ ) { char c = '0' + res[k]; resStr += c; } reverse( resStr.begin(), resStr.end() ); return resStr; }