这是汕头大学的第1030道题,答案: #include<stdio.h> #include<string.h> int change(char C[],int k) { int i; for(i=0;i<k;i++) { if(C[i]/10) { C[i]=C[i]%10; C[i+1]++; } } if(C[i]) k++; return k; } int main() { char A[52],B[52],C[52]; int len1,len2,i,j,k; while(scanf("%s",A)!=EOF) { getchar(); scanf("%s",B); for(k=0;k<52;k++) C[k]=0; len1=strlen(A); len2=strlen(B); i=len1-1; j=len2-1; k=0; while(i>=0&&j>=0) { C[k++]=A[i--]+B[j--]-2*48; } while(i>=0) { C[k++]=A[i--]-48; } while(j>=0) { C[k++]=B[j--]-48; } k=change(C,k)-1; for(i=k;i>=0;i--) printf("%d",C[i]); printf("\n"); } return 0; } 讲解:1由于所要加的两个数太大了,超出了长整树所能加的范围,所以想到用两个数组来存放数,应此 先把数当做字符串来读进来先。 2两数相加,应此用到了第3个数组,应此在进行加之前要把数组清空先。 3读入的字符串应为不一定长度相同,但是我门加的时候必须对其来加,应此我门要先把字符串中 元素从后面加起。 4式中-48的意思是把相应的字符串转化成相应的整数。 5考虑到相加时会产生进位这些,应此用了channg函数来判断是否有进位,有的话,那就进一位 6然后在用k来把数按原来的顺序排好。

评论