高精度问题中的大数乘小数,利用string来进行模拟,注意数位的移动即可。
Run Time: 0sec
Run Memory: 312KB
Code length: 973Bytes
SubmitTime: 2011-12-21 12:51:04
// Problem#: 1381
// Submission#: 1104323
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include <iostream>
#include <string>
using namespace std;
int main()
{
int T;
int i, j, bit;
int carry, add, keep;
string a, b, r;
cin >> T;
while ( T-- ) {
cin >> a >> b;
add = 0;
carry = 0;
r = string( 104, '0' );
for ( i = b.size() - 1; i >= 0; i-- ) {
for ( j = a.size() - 1; j >= 0; j-- ) {
bit = r.size() - ( b.size() - i - 1 ) - ( a.size() - j - 1 ) - 1;
keep = ( b[ i ] - 48 ) * ( a[ j ] - 48 );
add = ( r[ bit ] - 48 ) + keep % 10 + carry;
r[ bit ] = add % 10 + 48;
carry = add / 10 + keep / 10;
}
if ( carry != 0 ) {
r[ bit - 1 ] = carry + 48;
carry = 0;
}
}
r = ( r.find_first_not_of( "0" ) == string::npos ? "0": r.substr( r.find_first_not_of( "0" ) ) );
cout << r << endl;
}
return 0;
}