HugeInt HugeInt::operator * ( const HugeInt &mul )
{
HugeInt temp;
HugeInt tempT;
HugeInt tempN;
int carry = 0;
int n = 0;
for ( int i = 29; i >= 0; i-- ){
for ( int t = 0; t <= 29; t++ ){
tempT.integer[ t ] = 0;
tempN.integer[ t ] = 0;
}
for ( int j = 29; j >= 0; j-- ){
tempT.integer[ j ] = integer[ j ] * mul.integer[ i ] + carry;
if ( tempT.integer[ j ] > 9 ){
carry = tempT.integer[ j ] / 10;
tempT.integer[ j ] %= 10;
}
else
carry = 0;
}
for ( int y = 29; y >= 0; y-- ) // 移位处理
tempN.integer[ y - n ] = tempT.integer[ y ];
++n;
temp = temp + tempN;
}
return temp;
}
考虑到乘法运算,比如12 * 34,那么4先和12做乘法,然后3和12做乘法,之后两数相加得出结果,但是需要注意的是:3与12的乘积要左移一位后再与4和12的乘积做加法。依此类推,推之更大的数。
主要是这个移位处理,费了我好多时间,终于搞定了~