1. 程式人生 > >HDU 1753 大明A+B

HDU 1753 大明A+B

printf space bsp ++ pre 題解 clu sub pri

大明A+B

Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 13326 Accepted Submission(s): 4886

Problem Description 話說,經過了漫長的一個多月,小明已經成長了許多,所以他改了一個名字叫“大明”。
這時他已經不是那個只會做100以內加法的那個“小明”了,現在他甚至會任意長度的正小數的加法。

現在,給你兩個正的小數A和B,你的任務是代表大明計算出A+B的值。 Input 本題目包含多組測試數據,請處理到文件結束。

每一組測試數據在一行裏面包含兩個長度不大於400的正小數A和B。 Output 請在一行裏面輸出輸出A+B的值,請輸出最簡形式。詳細要求請見Sample Output。 Sample Input 1.1 2.9 1.1111111111 2.3444323343 1 1.1 Sample Output 4 3.4555434454 2.1 Author linle 題解:字符串存入,每個串分別開一個二倍長度的整形數組,倒著存, 整形數組中間值為小數點位置,從小數點開始向左向右存入。 AC代碼:
#include<iostream>
#include
<cstdio> #include<algorithm> #include<cstring> using namespace std; char a[405],b[405]; int aa[911],bb[911]; int main() { while(cin>>a>>b) { memset(aa,0,sizeof(aa)); memset(bb,0 ,sizeof(bb)); int aaa=strlen(a),bbb=strlen(b); for(int i=strlen(a)-1
;i>=0;i--) if(a[i]==.) aaa=i; for(int i=strlen(b)-1;i>=0;i--) if(b[i]==.) bbb=i; for(int i=aaa-1,k=501;i>=0;i--,k++) aa[k]=a[i]-0; for(int i=aaa+1,k=500;i<strlen(a);i++,k--) aa[k]=a[i]-0; for(int i=bbb-1,k=501;i>=0;i--,k++) bb[k]=b[i]-0; for(int i=bbb+1,k=500;i<strlen(b);i++,k--) bb[k]=b[i]-0; for(int i=0;i<904;i++) { aa[i+1]+=(aa[i]+bb[i])/10; aa[i]=(aa[i]+bb[i])%10; } int str=-1; for(int i=904;i>500;i--) if(aa[i]!=0) { str=i; break; } if(str==-1) printf("0"); else for(int i=str;i>500;i--) printf("%d",aa[i]); int strstr=-1; for(int i=0;i<=500;i++) if(aa[i]!=0) { strstr=i; break; } if(strstr==-1) printf("\n"); else { printf("."); for(int i=500;i>=strstr;i--) printf("%d",aa[i]); printf("\n"); } } return 0; }

今天也是元氣滿滿的一天!good luck!

HDU 1753 大明A+B