hdoj 1002 sum problem(超大數相加)
阿新 • • 發佈:2019-02-17
思路:因為是超大數,所以要用字元陣列進行儲存,並且在陣列的基礎上進行計算
程式碼如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char *argv[]) { char a[1010]; char b[1010]; int num1[1000]; int num2[1000]; int sum[1001]; int num1_len; int num2_len; int t; int t1; int i; int x; int y; scanf("%d",&t); for(t1=1;t1<=t;t1++) //陣列初始化,避免影響下一次迴圈 { memset(num1,0,sizeof(int)*1001); memset(num2,0,sizeof(int)*1001); memset(sum,0,sizeof(int)*1001); for(i=0;i<1010;i++) { a[i]='\0'; b[i]='\0'; } x=0; scanf("%s %s",a,b); num1_len=strlen(a); num2_len=strlen(b); for(i=num1_len-1;i>=0;i--) //反序儲存 { num1[i]=(int)a[x]-(int)'0'; x++; } x=0; for(i=num2_len-1;i>=0;i--) //反序儲存 { num2[i]=(int)b[x]-(int)'0'; x++; } if(num1_len>=num2_len) //小學加法進位 { for(i=0;i<num1_len;i++) { if(num1[i]+num2[i]>9) { sum[i]+=num1[i]+num2[i]-10; sum[i+1]++; } else { sum[i]+=num1[i]+num2[i]; } } } else { for(i=0;i<num2_len;i++) { if(num1[i]+num2[i]>9) { sum[i]+=num1[i]+num2[i]-10; sum[i+1]++; } else { sum[i]+=num1[i]+num2[i]; } } } printf("Case %d:\n",t1); printf("%s + %s = ",a,b); for(i=1000;i>=0;i--) //判斷sum陣列從哪一位開始最後的結果的第一個數 { if(sum[1000]==1) { y=1000; break; } if(sum[i]==0 && sum[i-1]!=0) { y=i-1; break; } } for(i=y;i>=0;i--) //輸出最後的結果 { printf("%d",sum[i]); } printf("\n"); if(t1!=t) printf("\n"); } return 0; }