#include"stdio.h" #include"string.h" int main() { int T,a=1,i,j,len1,len2,a1[1001],a2[1001],a3[1001],flag=0; char s1[1001],s2[1001]; scanf("%d",&T); while(T--) { scanf("%s %s",s1,s2); len1=strlen(s1); len2=strlen(s2); memset(a1,0,1001*sizeof(int)); memset(a2,0,1001*sizeof(int)); memset(a3,0,1001*sizeof(int)); for(i=len1-1,j=0;i>=0;i--,j++) a1[j]=s1[i]-'0'; for(i=len2-1,j=0;i>=0;i--,j++) a2[j]=s2[i]-'0'; //add(a1,a2,a3,len1,len2); int len=(len1>=len2)?len1:len2; for ( i=0;i<len;i++) { a3[i]+=a1[i]+a2[i]; a3[i+1]=a3[i]/10; a3[i]%=10; } //put(s1,s2,a3,a,i); printf("Case %d:\n",a); printf("%s + %s = ",s1,s2); if(a3[len]) flag=1; if(flag) { for (i=len;i>=0;i--) { printf("%d",a3[i]); } } else { for (i=len-1;i>=0;i--) { printf("%d",a3[i]); } } if(T!=0) printf("\n"); printf("\n"); a++; } return 0; }
一开始是用倒着加 ,但是很麻烦要考虑很多特殊情况,比如001+1 等此类情况。
所以我用这种方法了 挺方便的
#include <iostream> //#include <stdio.h> #include <cstring> using namespace std; void caulate_x(int ss1[],int ss2[],int sum[]) { for (int i=0;i<1000;i++) { sum[i] += ss1[i]+ss2[i]; sum[i+1] += sum[i]/10; sum[i] %=10; } } void fun(char s[],int ss[],int len) { int j=0; for (int i=len-1;i>=0;i--) { ss[j++] = s[i]-'0'; } } int main() { int n,i,k; cin>>n; char s1[1001],s2[1001]; int ss1[1001],ss2[1001]; int sum[1001]; for (i=1;i<=n;i++) { cin>>s1>>s2; memset(ss1,0,sizeof(ss1)); memset(ss2,0,sizeof(ss2)); memset(sum,0,sizeof(sum)); fun(s1,ss1,strlen(s1)); fun(s2,ss2,strlen(s2)); caulate_x(ss1,ss2,sum); cout<<"Case "<<i<<":"<<endl; printf("%s + %s = ",s1,s2); k=1000; while (!sum[k]) k--; cout<<sum[k--]; for (;k>=0;k--) { printf("%d",sum[k]); } if(i!=n) cout<<endl<<endl; else cout<<endl; } return 0; }