#define L 1001
char str1[L],str2[L];
int a[L],b[L],c[L];
int main(){
int i,j,len1,len2,len;
while(scanf("%s%s",str1,str2)!=EOF){
memset(c,0,sizeof(c));
len1=strlen(str1);
len2=strlen(str2);
len=len1+len2; //相乘后的位数不会超过len1+len2
//将两个输入的字符串逆序排列
for(i=0;i<len1;i++){
a[i]=str1[len1-1-i]-'0';
}
for(j=0;j<len2;j++){
b[j]=str2[len2-1-j]-'0';
}
//乘运算
for(i=0;i<len1;i++){
for(j=0;j<len2;j++){
c[i+j]+=a[i]*b[j];
}
}
//>10的做进位
for(i=0;i<len;i++){
if(c[i]>=10){
c[i+1]+=c[i]/10;
c[i]%=10;
}
}
// 去除前导0,否则出现输出为02
i=len;
while(c[i]==0) i--;
// 判断两个非负数之积是否为0,以及逆序打印
if(i<0){
printf("0");
}else{
for(i;i>=0;i--){
printf("%d",c[i]);
}
}
printf("\n");
}
return 0;
}
大数相乘
最新推荐文章于 2022-09-05 19:19:03 发布