当两个比较大的整数相乘时,可能会出现数据溢出的情形。为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法。具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过8位,然后把它们相乘的结果存储在另一个字符串当中(长度不会超过16位),最后把这个字符串打印出来。例如,假设用户输入为:62773417和12345678,则输出结果为:774980393241726.
输入:
62773417 12345678
输出:
774980393241726
#include<stdio.h>
#include<string.h>
int main ()
{
int i=0,j=0,n=0,w=-1,p=-1,temp,l=0,sum=0;
int str[100]={0},ptr[100]={0};
char str1[9],str2[9];
scanf("%s %s",str2,str1);
for(i=strlen(str1)-1;i>=0;i--){
p++;
w=-1;
for(j=strlen(str2)-1;j>=0;j--){
w++;
str[w+p]+=(str1[i]-'0')*(str2[j]-'0');
}
}
for(i=100;i>=0;i--){
if(str[i]!=0)
break;
}
for(j=0;j<=i;j++){
ptr[n++]=str[j];
}
for(j=0;j<n;j++){
temp=ptr[j];
ptr[j]=temp%10;
ptr[j+1]+=temp/10;
}
if(ptr[n]>0){
for(i=n;i>=0;i--){
if(ptr[i]==0)
sum++;
printf("%d",ptr[i]);
}
if(sum==n+1)
printf("0\n");
}
else{
for(i=n-1;i>=0;i--){
if(ptr[i]==0)
sum++;
printf("%d",ptr[i]);
}
if(sum==n)
printf("0\n");
}
return 0;
}