高精度加法
Description
输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。
Input
输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两个整数都不超过100位,两数的最高位都不是0。
Output
输出一行,表示a + b的值。
Sample Input
20100122201001221234567890
2010012220100122
2010012220100122
Sample Output
20100122203011233454668012
思路如下:
第一种是采用数学的思想,去计算,好理解一些。
第二种,就是采用后面进位的方式,直接加。
第二种代码如下:
#include<stdio.h> #include<string.h> #define MAXa 100 #define MAXb 100 #define MAXc 105 int main() { char a[MAXa],b[MAXb]; int i,j,c[MAXc],t,la,lb,n=0; int r=0; scanf("%s%s",a,b); memset(c,0,sizeof(c)); la=strlen(a); lb=strlen(b); for(i=la-1,j=lb-1; i>=0&&j>=0; i--,j--) { t=(a[i]-'0')+(b[j]-'0')+r; c[n++]=t%10; r=t/10; } if(la<lb) for(; j>=0; j--) { t=b[j]-'0'+r; c[n++]=t%10; r=t/10; } else if(la>lb) for(; i>=0; i--) { t=a[i]-'0'+r; c[n++]=t%10; r=t/10; } else c[n++]=r; for(i=MAXc-1; i>=0; i--) if(c[i]) break; for(j=i; j>=0; j--) printf("%d",c[j]); printf("\n"); return 0; }
第一种代码如下:
#include<stdio.h> #include<string.h> int main() { char a[105],b[105]; int x[105],y[105],z[105]; int len,len1,i,j,t; while(scanf("%s%s",&a,&b)!=EOF) { len=strlen(a); len1=strlen(b); if(len>len1) j=len; else j=len1; for(i=0;i<j;i++) x[i]=y[i]=z[i]=0; t=j-1; for(i=len-1;i>=0;i--,t--) x[t]=a[i]-'0'; t=j-1; for(i=len1-1;i>=0;i--,t--) y[t]=b[i]-'0'; for(i=0;i<j;i++) z[i]=x[i]+y[i]; for(i=j-1;i>0;i--) { if(z[i]>=10) { z[i]=z[i]-10; z[i-1]++; } } for(i=0;i<j;i++) printf("%d",z[i]); printf("\n"); } return 0; }