無限大的兩個整數相加
阿新 • • 發佈:2019-02-12
#include<stdio.h> #include<string.h> int main() { int sum; int n; int i,j; int ii,zz; int b,s; int Alen,Blen; int AA[100]; int BB[100]; int CC[101]; char A[256]; char B[256]; char C[256]; int flag=0; printf("Input A B:"); gets(A); gets(B); Alen=strlen(A);Blen=strlen(B); /*比較出誰的位數大*/ if(Alen>Blen) { b=Alen; s=Blen; } else { b=Blen; s=Alen; } printf("%d %d\n",Alen,Blen); /*把較小的那個數前面加0,使其和大的那個數位數相同!!*/ if(Alen>Blen) { for(n=b;n>=b-s;n--) { B[n]=B[n-b+s]; } for(n=0;n<b-s;n++) { B[n]='0'; } for(i=0;i<b;i++) printf("%c",B[i]); printf("\n"); } else { for(n=b;n>=b-s;n--) { A[n]=A[n-b+s]; } for(n=0;n<b-s;n++) { A[n]='0'; } for(i=0;i<b;i++) printf("%c",A[i]); printf("\n"); } /*把字串陣列變成整型陣列*/ for(i=0;i<b;i++) { AA[i]=A[i]-'0'; } for(j=0;j<b;j++) { BB[j]=B[j]-'0'; } /* 兩數相加*/ for(ii=b-1;ii>=1;ii--) { sum=AA[ii]+BB[ii]+flag; if(sum>=10) { CC[ii]=sum%10; flag=1; } else { CC[ii]=sum; flag=0; } } /*檢測最高位是否溢位*/ if(AA[0]+BB[0]+flag>=10) { for(i=1;i<b;i++) { CC[i]=CC[i+1];//這個地方的順序要注意一下!!!! } CC[1]=(AA[0]+BB[0]+flag)%10; CC[0]=1; for(zz=0;zz<=b;zz++) { C[zz]=CC[zz]+'0'; } printf("AA+BB="); for(zz=0;zz<=b;zz++) { printf("%c",C[zz]); } printf("\n"); } else { CC[0]=AA[0]+BB[0]+flag; for(zz=0;zz<b;zz++) { C[zz]=CC[zz]+'0'; } printf("AA+BB="); for(zz=0;zz<b;zz++) { printf("%c",C[zz]); } printf("\n"); } return 0; }