【问题描述】输出两个不超过100位的大整数的乘积。
要求用串这一章的“块链串”知识实现两个大整数的相乘。比如每一个结点存储5位,12345678983426801则需要4个结点;先实现大整数乘上一个一位数;再实现两个大数相加。
用这样的链式存储形式便于计算:12--->34567--->89834--->26801
或者:26801--->89834--->34567--->12
【输入形式】
两个大数
【输出形式】
相乘的结果
【样例输入】
1234567891011121314151617181920
2019181716151413121110987654321
【样例输出】
2492816912877266687794240983772975935013386905490061131076320
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int c[20000], j;
int a[5050], b[5005];
char aa[5005], bb[5005];
cin >> aa >> bb;
int i = 0, sa = strlen(aa), sb = strlen(bb);
for (i; i < sa; i++)
{
a[i] = aa[sa - i - 1] - '0';
}
for (i = 0; i < sb; i++)
{
b[i] = bb[sb - i - 1] - '0';
}
int len = sa + sb;
for (i = 0; i < sa; i++)
for (j = 0; j < sb; j++)
{
c[i + j] += a[i] * b[j];
}
for (i = 0; i < len; i++)
if (c[i] > 9)
{
c[i + 1] += c[i] / 10;
c[i] %= 10;
}
while (c[len] == 0 && len > 0)
len--;
for (int i = len; i >= 0; i--)
cout << c[i];
}