hdu1002 高精度加法
此题的思路是模拟加法运算的过程,首先用s1,s2两个字符串数组接受两个大数。再将其转化为数字。s3数组保存加法之后的数字。注意输出时除去前导0 ,
代码如下:
#include<stdio.h> #include<string.h> int main() { void zhuan(int ,int ,char s1[],char s2[],char s[]); char s1[1001],s2[1001],s[1001]; int i,a,b,t,j; memset(s1,0,sizeof(s1)); memset(s2,0,sizeof(s2)); scanf("%d",&t);getchar(); for(j=1;j<=t;j++) { scanf("%s%s",s1,s2); printf("Case %d:\n",j); printf("%s + %s = ",s1,s2); a=strlen(s1); b=strlen(s2); for(i=0;i<a;i++)//将字符转化为数字 s1[i]=s1[i]-'0'; for(i=0;i<b;i++) s2[i]=s2[i]-'0'; if(a>=b) zhuan(a,b,s1,s2,s); else zhuan(b,a,s2,s1,s); if(j!=t) printf("\n"); } return 0; } void zhuan(int a,int b,char s1[],char s2[],char s[])//模拟加法过程 { int t=0,i,j;//t保存加法产生的进位 for(i=a-1,j=b-1;j>=0;i--,j--) { s[i]=(s1[i]+s2[j]+t)%10; t=(s1[i]+s2[j]+t)/10; } for(i=a-b-1;i>=0;i--) { s[i]=(s1[i]+t)%10; t=(s1[i]+t)/10; } if(t>0) printf("%d",t); for(i=0;i<a&&s[i]==0;i++);//输出时除去前导0 for(j=i;j<a;j++) printf("%d",s[j]); printf("\n"); }