算法提高 P1001
当两个比较大的整数相乘时,可能会出现数据溢出的情形。为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法。具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过8位,然后把它们相乘的结果存储在另一个字符串当中(长度不会超过16位),最后把这个字符串打印出来。例如,假设用户输入为:62773417和12345678,则输出结果为:774980393241726.
输入:
62773417 12345678
输出:
774980393241726
#include<stdio.h>
#include<string.h>
int main()
{
char a1[10000],b1[10000];
int a[10000],b[10000],k[10000]={0};
int c=0,i,j,t,f,m,n,i1,j1;
scanf("%s %s",a1,b1);
m=strlen(a1);n=strlen(b1);
for(i=m-1;i>=0;i--)
a[c++]=(a1[i]-'0');
a[c]='\0';
c=0;
for(i=n-1;i>=0;i--)
b[c++]=(b1[i]-'0');
b[c]='\0';
for(i=0;i<m;i++)
for(j=0;j<n;j++){
t=a[i]*b[j];
f=i+j;
k[f]+=(t%10);
k[f+1]+=(t/10);
while(k[f]>=10){
k[f+1]+=(k[f]/10);
k[f]=k[f]%10;
f++;
}
}
c=m+n-1;
if(a[m-1]*b[n-1]>=10) c++;
while(k[c-1]==0&&c!=1) c--;
for(i=c-1;i>=0;i--)
printf("%d",k[i]);
return 0;
}
}
自己都佩服自己了 哈哈哈
开始搜了一下 看别人还用递归……算了吧 还是自己写