主要要会使用一个规律: 即一个数的第i 位和另一个数的第j 位相乘所得的数,一定是要累加到结果的第i+j 位上,即a[i+j] = a[i] * a[j]
#include<cstring>
using namespace std;
#define maxn 1000
void multiplication(char num1[], char num2[])
{
int a[maxn] = {0}, b[maxn] = {0};
int ans[maxn*2 + 10] = {0};
int len1 = strlen(num1), len2 = strlen(num2);
for(int i = 0,j = len1 - 1; j >= 0; j--)
a[i++] = num1[j] - '0';
for(int i = 0,j = len2 - 1; j >= 0; j--)
b[i++] = num2[j] - '0';
for(int i = 0; i < len1; i++)
for(int j = 0; j < len2; j++)
ans[i + j] += a[i] * b[j];
for(int i = 0; i <= maxn * 2; i++)
{//进位
if(ans[i] >= 10)
{
ans[i+1] += ans[i] / 10;
ans[i] %= 10;
}
if(ans[i + 1] < 10 && (i + 1) > strlen(num1) + strlen(num2))break;
}
int j;
for(j = maxn * 2; ans[j] == 0 && j >= 0; j--);//去除前导0
if(j >= 0)
for(int i = j; j >= 0; j--)
cout<<ans[j];
else
cout<<0;
cout<<endl;
}