1381. a*b
Constraints
Time Limit: 1 secs, Memory Limit: 32 MB
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
题目分析
理同1201
先反转字符串,
思考如何变成字符串与个位数的乘法
注意前缀零和结果为零
#include <iostream>
#include <memory.h>
int ans[106];
std::string reverse(std::string s) {
std::string sss = "";
for (int i = s.length()-1; i >= 0; --i)
sss += s[i];
return sss;
}
void add(std::string s, int times) {
for (int i = 0; i < s.length(); ++i) {
ans[i] += (s[i]-'0') * times;
if (ans[i] > 9) {
ans[i+1] += ans[i] / 10;
ans[i] %= 10;
}
}
}
int main()
{
int num;
std::cin >> num;
while (num--) {
memset(ans, 0, sizeof(ans));
std::string s;
int times;
std::cin >> s >> times;
s = reverse(s);
while (times != 0) {
int temp = times % 10;
add(s, temp);
s = "0" + s;
times = (times - temp) / 10;
}
bool pre = true;
for (int i = 105; i >= 0; --i) {
if (pre && ans[i] == 0)
continue;
pre = false;
std::cout << ans[i];
}
if (pre) std::cout << "0";
std::cout << std::endl;
}
}