大整数乘法
求两个不超过200位的非负整数的积。
输入样例:
12345678900
98765432100
输出样例:
1219326311126352690000
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int result[405] = { 0 };
int number1[202];
int number2[202];
int len1;
int len2;
void calculate(int p, int k)
{
for (int i = 0; i < len1; i++)
{
result[i + k] += p * number1[i];
}
}
int main()
{
char t1[202];
char t2[202];
cin.getline(t1, 200, '\n');
cin.getline(t2, 200, '\n');
len1 = strlen(t1);
len2 = strlen(t2);
reverse(t1, t1 + len1);
reverse(t2, t2 + len2);
for (int i = 0; i < len1; ++i)
{
number1[i] = t1[i] - '0';
}
for (int i = 0; i < len2; ++i)
{
number2[i] = t2[i] - '0';
}
for (int i = 0; i < len2; i++)
{
calculate(number2[i], i);
}
for (int i = 0; i < 405; i++)
{
result[i + 1] += result[i] / 10;
result[i] = result[i] % 10;
}
int end;
for (int i = 404; i >= 0; i--)
{
if (result[i] != 0)
{
end = i;
break;
}
}
for (int i = end; i >= 0; i--)
cout << result[i];
cout << endl;
return 0;
}