今天早上没事干又把这个敲了一遍,虽然手冻得不行,不过又深入理解理解还可以哈。
难点就在给你的整数可能很大很长,所以long long 肯定不行,得用字符串来读取存储,然后注意一下相加的时候进位,最后输出注意去0就OK啦。(核心思想就是大数逆序相加最后逆序再输出就是正确结果了)。然后下边是自己写的思路比较清晰的代码,大家可以借鉴后再自己想想有没有更简单的,可以互相学习呀。
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char A[1005],B[1005]; int a[1005],b[1005],c[2002]; void nuxu()//简单的逆序存入整型数组 { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); int k1=0,k2=0,ans; ans=strlen(A); for(int i=ans-1;i>=0;i--) a[k1++]=A[i]-‘0‘; ans=strlen(B); for(int i=ans-1;i>=0;i--) b[k2++]=B[i]-‘0‘; } void yunsuan() { int k=strlen(A)>strlen(B)?strlen(A):strlen(B); int len=0; for(int i=0;i<k;i++) { c[i]+=a[i]+b[i]; if(c[i]>9)//进位操作,为什么只用判一次,或者说只进位一次大家再自己想想啦; { c[i+1]++; c[i]-=10; } } } int main() { int t,flag; scanf("%d",&t); for(int j=1;j<=t;j++) { flag=0; if(j!=1) printf("\n");//题目要求格式 scanf("%s%s",A,B); nuxu(); //写main函数外边更清晰,简便点 yunsuan(); printf("Case %d:\n%s + %s = ",j,A,B);//以上是题目要求输出格式 for(int i=1000;i>=0;i--)//逆序输出 { if(c[i]!=0||flag==1)//直接控制去前导0了 { printf("%d",c[i]); flag=1; } } printf("\n"); } }