ACM: A + B Problem II (两个大整数相加)
Code:
#include <stdlib.h> #include <stdio.h> #include <string.h> #define MAX 1000 //给数组赋值 void arrV(int a[],int len,int p){ int i; for(i=0;i<len;i++){ a[i]=p; } } //打印数组中的运算结果 void printRverse(int a[]){ int len=0,i=0; while(a[i]!=-1){ len++; i++; } for(i=len-1;i>-1;i--){ printf("%d",a[i]); } } //两个数组相加 void arrSum(int a[],int b[],int s[],int len_a,int len_b){ int jin=0,i=0,j=0,temp; int len=len_a<=len_b?len_a:len_b; for(;i<len;i++){ temp=a[i]+b[i]; if(temp<9){ s[i]=jin==0?temp:temp+1; jin=0; }else if(temp==9){ if(jin==0){ s[i]=temp; jin=0; }else{ s[i]=0; jin=1; } }else{ s[i]=jin==0?temp%10:temp%10+1; jin=1; } //printf("%d=[%d]\n",i,s[i]); } if(len_a>len_b){ while(i<len_a){ if(jin==0){ s[i]=a[i]; }else{ if(a[i]<9){ s[i]=a[i]+1; jin=0; }else if(a[i]==9){ s[i]=0; jin=1; } } i++; } if(jin==1){ s[i]=1; } }else{ while(i<len_b){ if(jin==0){ s[i]=b[i]; jin=0; }else{ if(b[i]<9){ s[i]=b[i]+1; jin=0; }else if(b[i]==9){ s[i]=0; jin=1; } } i++; } if(jin==1){ s[i]=1; } } } //将读入的字符串转入到整型数组中 void charToArray(char *p,int a[],int *len){ int i,j=0; *len=strlen(p); for(i=*len-1;i>-1;i--){ a[j]=p[i]-48; j++; } } int main(){ int n,a[MAX],b[MAX],s[MAX],i=1,j=0,len_a,len_b; char p[MAX],q[MAX]; scanf("%d",&n); while(n>0){ arrV(a,MAX,-1); arrV(b,MAX,-1); arrV(s,MAX,-1); scanf("%s %s",p,q); charToArray(p,a,&len_a); charToArray(q,b,&len_b); arrSum(a,b,s,len_a,len_b); printf("Case %d:\n",i); printf("%s + %s = ",p,q); printRverse(s); printf("\n"); if(n>1){ printf("\n"); } i++; n--; } return 1; }