【输入】
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。。
【输出】
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。。
【输入样例】
12345678900
98765432100
【输出样例】
1219326311126352690000
【参考程序】
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
#define SIZE 201
char a1[SIZE], b1[SIZE];
int x, lena, lenb, lenc, a[SIZE], b[SIZE], c[SIZE*SIZE];
int main() {
gets(a1); // 整行读入字符串a1,b1
gets(b1);
lena = strlen(a1);
lenb = strlen(b1);
for (int i=0; i<lena; i++) {
a[lena-i] = a1[i] - '0'; // 字符串a1转存到整型数组a,并倒序存储
}
for (int i=0; i<lenb; i++) {
b[lenb-i] = b1[i] - 48; // 字符串b1转存到整型数组b,并倒序存储
}
for (int i=1; i<=lena; i++) {
x = 0; // x记录进位
for (int j=1; j<=lenb; j++) { // 将因素a的每一位分别与因数b的每一位相乘
c[i+j-1] = a[i]*b[j] + x + c[i+j-1]; // 将算出的结果加到积里
x = c[i+j-1] / 10; // 计算进位
c[i+j-1] %= 10; // 只保留个位
}
c[i+lenb] = x; // 进位
}
lenc = lena + lenb;
while (c[lenc]==0 && lenc>1) { // 删去多余的0
lenc--;
}
for (int i=lenc; i>=1; i--) {
cout << c[i];
}
return 0;
}