引言 : int最大能表示的數約在10^9,最大的long long也只能存儲約在10^19范圍內的數。那怎么進行大數的運算呢,拿起草稿紙,做一個加法運算,看看會有哪些步驟。
題解 :
用字符數組來存儲大數,每一位當做一個字符,可以開多大的數組,就能計算多少位的數。
舉個栗子,計算99999999999+1. 直接用int,答案顯然是錯的。用兩個字符數組
s1 :
9 9 9 9 9 9 9 9 9 9 9 \0
s2 :
1 \0
再用字符數組s來存儲兩數之和,顯然s最長為s1的長度加1。從最低位依次模擬加法,注意進位,注意字符0與數字0的區別,注意數組從0開始。
s:
1 0 0 0 0 0 0 0 0 0 \0
#include<stdio.h> #include<string.h> void Bignum_add(char * s1,char * s2,char *s) { int i,j,a,l1,l2,L,t; l1=strlen(s1); l2=strlen(s2); s[0]='0'; a=0; if(l1>l2) L=l1; else L=l2; s[L+1]='\0'; for(i=L;l1>0&&l2>0;i--) { a=(s1[--l1]-'0')+(s2[--l2]-'0')+a/10; s[i]=a%10+'0'; } while(l1){ a=(s1[--l1]-'0')+a/10; s[i--]=a%10+'0'; } while(l2){ a=(s2[--l2]-'0')+a/10; s[i--]=a%10+'0'; } s[i]=a/10+'0'; t=0; while(s[t]=='0'&&t<L) t++; strcpy(s,s+t); //比如,將000001化成1 } int main() { int T,d=1; char s[1000],s1[1000],s2[1000]; scanf("%d",&T); while(T--) { scanf("%s%s",s1,s2); Bignum_add(s1,s2,s); printf("Case %d:\n",d++); printf("%s + %s = %s\n",s1,s2,s); if(T!=0) printf("\n"); } return 0; }