1381. a*b
Description
Give two positive integers a and b, please help us calculate a*b.
Input
The first line of the input is a positive integer T. T is the number of test cases followed.
Each test case contain two integer a,b (0<=a<=10^100, 0<=b<=10,000) given in one line.
Output
The output of each test case should consist of one line, contain the result of a*b.
Sample Input
12 7
Sample Output
14
Problem Source
Algorithm Course Examination 2006
思路:大整数乘法,稍微修改了下,把b当成int叠加吧,感觉这种方法比较简单。
代码:
#include <iostream>
#include <string>
using namespace std;
string BigAdd(string a, string b)
{
while (a.size() < b.size())
{
a = '0' + a;
}
while (a.size() > b.size())
{
b = '0' + b;
}
a = '0' + a;
b = '0' + b;
for (int i = a.size() - 1; i > 0; i--)
{
a[i] = a[i] + b[i] - '0';
if (a[i] > '9')
{
a[i] = a[i] - 10;
a[i - 1] = a[i - 1] + 1;
}
}
int zeroNum = 0;
for (int j = 0; j < a.size(); j++)
{
if (a[j] == '0')
{
zeroNum++;
}
else
{
break;
}
}
if (zeroNum == a.size())
{
a = '0';
}
else
{
a = a.substr(zeroNum, a.size() - zeroNum);
}
return a;
}
string specialMul(string a, int b)
{
string sum = "0";
for (int i = 0; i < b; i++)
{
sum = BigAdd(sum, a);
}
return sum;
}
int main()
{
int size;
string a;
int b;
cin >> size;
while (size--)
{
cin >> a >> b;
cout << specialMul(a, b) << endl;
}
return 0;
}