1001 A + B Problem II(C語言 大數加法模板)
阿新 • • 發佈:2019-01-29
#include<stdio.h> int len(char *a)//一個判斷字串長度的函式與strlen一樣 { int i=0; while(*a++!='\0') { i++; } return i; } /***************************************************************/ int main() { int i,j,la,lb,n,k; char a[1005],b[1005],t;//題目要求是1000這裡注意 scanf("%d",&n);//n組資料 k=n;//僅僅為了輸出格式 while(n--) { t='0';//這個t在我的程式裡很重要,往下看 if(n==k-1) getchar();//防止陣列得到不該得到的值 for(i=0;;i++) { scanf("%c",&a[i]); if(a[i]==' ')//輸入第一個陣列時以空格結束 break; } a[i]='\0';//!!!!!!注意!!!!!!加個'\0'否則會輸出亂碼 for(j=0;;j++) { scanf("%c",&b[j]);//陣列b同理 if(b[j]=='\n') break; } b[j]='\0';//繼續注意 /***************************************************************/ la=len(a);//計算長度 lb=len(b); if(la>=lb)//以長的那個陣列為基礎進行運算 { printf("Case %d:\n%s + %s = ",k-n,a,b);//輸出格式,不懂請看題目 for(j=j-1,i=i-1;;j--,i--)//這裡的for一定不能巢狀 { if(b[j]<='9'&&b[j]>='0'&&j>=0) //這裡有個非常重要的東西j>=0 //這個條件是用來防止陣列越界的,很重要。 a[i]+=(b[j]-'0');//不懂請看asc碼 if(a[i]>'9'&&i>=0)//這個if語句是用來進位的 { a[i]-=10; if((i-1)>=0) a[i-1]++; else t++; //t是保證陣列不越界的 //像99+1=100這樣的,99有兩個元素 //但是100有3個,t就是來儲存那個1的 } if(i==0) break; } if(t<='9'&&t>'0')//注意控制輸出格式 { printf("%c",t); puts(a); if(n!=0) printf("\n"); } else { puts(a); if(n!=0) printf("\n"); } } /***************************************************************/ else { printf("Case %d:\n%s + %s = ",k-n,a,b);//下面同理,上面看懂了下面也懂了 for(j=j-1,i=i-1;;j--,i--) { if(a[i]<='9'&&a[i]>='0'&&i>=0) b[j]+=(a[i]-'0'); if(b[j]>'9'&&j>=0) { b[j]-=10; if((j-1)>=0) b[j-1]++; else t++; } if(j==0) break; } if(t<='9'&&t>'0') { printf("%c",t); puts(b); if(n!=0) printf("\n"); } else { puts(b); if(n!=0) printf("\n"); } } } return 0; }