1.位数的确定:假设c用来保存大数据a与大数据b的和,那么c的长度len= max(lena,lenb) + 1
2.进位处理:
c[i] = a[i] + b[i]+jw;(jw为每轮进的位) jw = c[i]/10; c[i] = c[i]%10;
3.删除前导0
for(int i=len-1;i>=0;i--){ if(c[i]==0&&len>1) len--; else break; }
源码
#include <stdio.h> #include <string.h> #define Max 3000 void plus(char s1[],char s2[]); int max(int a,int b); int main() { char s1[Max]; char s2[Max]; scanf("%s %s",s1,s2); plus(s1,s2); } void plus(char s1[],char s2[]){ int a[Max]; int b[Max]; int c[Max]; int lena=strlen(s1); for(int i=0;i<lena;i++) a[i]=s1[lena-i-1]-'0'; int lenb=strlen(s2); for(int i=0;i<lenb;i++) b[i]=s2[lenb-i-1]-'0'; int len=max(lena,lenb)+1; int jw=0; for(int i=0;i<len;i++){ c[i]=a[i]+b[i]+jw; jw=c[i]/10; c[i]%=10; } for(int i=len-1;i>=0;i--){ if(c[i]==0&&len>1) len--; else break; } for(int i=len-1;i>=0;i--) printf("%d",c[i]); } int max(int a,int b){ if(a>b) return a; else return b; }
以上代码仅供参考