/*题目描述:
给出两个长度小于100位的正整数,求其乘积。
输入描述:
两行,一行一个数。
输出描述:
一行,为所求乘积。
样例输入:
1937
2931
样例输出:
5677347
*/
给出两个长度小于100位的正整数,求其乘积。
输入描述:
两行,一行一个数。
输出描述:
一行,为所求乘积。
样例输入:
1937
2931
样例输出:
5677347
*/
#include<iostream>
#include<cstring>
using namespace std;
int main() {
char a[101], b[101]; //定义字符数组是为了好测量,输入的长度
while (cin >> a >> b) {
char swap[101]; //用来进行交换的,儒过a的长度小于b的长度
int a1[101] = { 0 }, b1[101] = { 0 }; //接受a与b的,并将其转化为整形数组和反转
int lena1, lenb1; //测量a与b的长度
lena1 = strlen(a), lenb1 = strlen(b);
int n; //接受lena1与lena2的最大值,并且为下面的动态数组做准备
n = (lena1 > lenb1 ? lena1 : lenb1);
//申请动态数组,a与b的乘积最对有2*n为数
int *p;
p = new int[2 * n];
//将p数组清零
memset(p, 0, sizeof(int)*(2 * n));
//控制b1为最短的数组
if (lena1 < lenb1) {
strcpy(swap, b);
strcpy(b, a);
strcpy(a, swap);
}
lena1 = strlen(a), lenb1 = strlen(b);
//反转a数组
for (int i1 = lena1 - 1; i1 >= 0; i1--) {
a1[lena1-1-i1] = a[i1] - '0';
}
//反转数组b
for (int k1 = lenb1 - 1; k1 >= 0; k1--) {
b1[lenb1 - 1 - k1] = b[k1] - '0';
}
int len; //控制p数组从第几位开始
for (int i = 0; i < lenb1; i++) {
len = i;
for (int k = 0; k < lena1; k++) {
p[len] += b1[i] * a1[k];
if (p[len] > 9) {
p[len + 1] += p[len] / 10;
p[len] = p[len] % 10;
}
len++;
}
}
while (p[len] == 0) {
len--;
}
for (int k2 = len ; k2 >= 0; k2--) {
cout << p[k2];
}
delete[]p;
cout << endl;
}
return 0;
}