两个大数相乘
- 不同于上一篇文字大数相乘(阶乘),如果两个数都是大数,那么两个数都要逐位相乘
- 大数相乘注意最后处理前置零
代码如下
#include<iostream>
#include<cstring>
using namespace std;
#define max_n 3
char num[100];
int ans[1000] = {1, 1};
int main() {
memset(num, 0, sizeof(num));
for (int k = 0; k < max_n; k++) {
cin >> num;
int len = strlen(num);
int tmp[1000] = {0};
for (int i = 1; i <= ans[0]; ++i) {
for (int j = 0; j < len; ++j) {
tmp[i + j + 1] += ans[i] * (num[j] - '0');
}
}
tmp[0] = ans[0] + len;
memcpy(ans, tmp, sizeof(int) * (ans[0] + len + 1));
for (int i = ans[0]; i >= 1; i--) {
if (ans[i] < 10) continue;
ans[i - 1] += ans[i] / 10;
ans[i] %= 10;
}
}
int flag = 1;
for (int i = 1; i <= ans[0]; i++) {
if (ans[i] == 0 && flag == i) {
flag++;
continue;
}
cout << ans[i];
}
return 0;
}