题目描述
求两数的积。
输入格式
两行,两个整数。
输出格式
一行一个整数表示乘积。
输入输出样例
输入 #1复制
1 2
输出 #1复制
2
说明/提示
每个数字不超过 10^{2000}102000 ,需用高精。
#include <stdio.h>
#include<string.h>
int a[2001];
int b[2001];
char a1[2001];
char b1[2001];
int c[4002];
int main()
{
scanf("%s\n%s", a1, b1);
int i = 0;
int la = strlen(a1);
int lb = strlen(b1);
for (i = 0; i < la; i++)a[la - 1 - i] = a1[i] - 48;
for (i = 0; i < lb; i++)b[lb - 1 - i] = b1[i] - 48;
int m = la + lb ;//乘积的位数不超过两数位数之和 比如最大的两位数*最大的三位数,不过是99*999=98901,五位数。其他的类似
for (int i = 0; i < la; i++) {
for (int j = 0; j < lb; j++) {
c[i + j] += a[i] * b[j];//因为乘法中,如此处,b的每一位都要和a的每一位相乘;且贡献的位置是i+j位上。可自行在草稿纸上演算乘法验证。
}
}
for (int i = 0; i < m; i++) {
c[i + 1] += c[i] / 10;//模拟进位;
c[i] %= 10;
}
while (c[m] == 0 && m >= 1)m--;//去除前导0
for (i = m; i >= 0; i--)printf("%d", c[i]);
return 0;
}