高精度乘法
题目描述
给出两个非负整数,求它们的乘积。
输入格式
输入共两行,每行一个非负整数。
输出格式
输出一个非负整数表示乘积。
输入输出样例
输入 #1复制
1
2
输出 #1复制
2
说明/提示
每个非负整数不超过 10^(2000)。
#include<stdio.h>
#include<string.h>
char S1[2000],S2[2000]; //数的输入(用字符数组)
int a[2000],b[2000],c[2000]; //A*B=C
int main ()
{
int i,j,k,l,o;
int length_A,length_B,length_C; //数的长度
scanf("%s",S1); //高精度的数的输入
scanf("%s",S2);
length_A=strlen(S1);
length_B=strlen(S2);
for(i=0;i<length_A;i++) //个、十、百...对应数组下标1、2、3
a[length_A-i]=S1[i]-'0';
for(j=0;j<length_B;j++)
b[length_B-j]=S2[j]-'0';
length_C=length_A+length_B; //乘'C'最大的长度
for(k=1;k<=length_A;k++)
{
for(o=1;o<=length_B;o++)
{
c[k+o-1]+=a[k]*b[o];
c[k+o]+=c[k+o-1]/10;
c[k+o-1]%=10;
}
}
if(c[length_C]==0&&length_C>0) //删除前导'0'
length_C=length_C-1;
for(l=length_C;l>0;l--) //乘'C'的输出
printf("%d",c[l]);
return 0;
}