题目信息
计算最多20010位十进制正整数A和B的乘积A*B。
输入
1259
8
输出
10072
测试样例
1259
8
10072
解答
#include<iostream>
#include<string>
using namespace std;
int A[40025];
int B[40025];
int ans[40025];//ans[0]用来存储答案的位数
int main()
{
//freopen("E://test.txt", "r", stdin);
string str1;
string str2;
cin >> str1;
cin >> str2;
int lenA = str1.length();
int lenB = str2.length();
for (int i = 1; i <= lenA; i++)
A[i] = str1[lenA - i] - '0';
for (int j = 1; j <= lenB; j++)
B[j] = str2[lenB - j] - '0';
for (int i = 1; i <= lenA; i++)
{
for (int j = 1; j <= lenB; j++)
{
ans[i + j - 1] += A[i] * B[j];
}
}
for (int i = 1; i <= lenA + lenB; i++)
{
ans[i + 1] += ans[i] / 10;
ans[i] %= 10;
}
//用第0位表示长度
if (ans[lenA + lenB])
{
ans[0] = lenA + lenB;
}
else
{
ans[0] = lenA + lenB - 1;
}
for (int k = ans[0]; k >= 1; k--)
{
cout << ans[k];
}
cout << endl;
return 0;
}
想法
本题实际上使用了一种偷懒的分治方法,即直接将每一位进行分治,然后再合并。
可以改进为: