ikki有一沓標有大寫英文字母的卡片,但是奇怪的是裡面只有標從’A’-‘T’的卡片,ikki用這20種卡片設計了一個
小游戲:用’A’-‘T’分別表示數字 0 – 19,ikki把這些卡片表示的字母看成是20進制數,並用卡片拼成了兩個數
字,現在ikki想讓你用卡片表示出這兩個數字相加之後的結果(卡片數量不限)。例如:拼成兩個20進制數
分別是AAAADH,BCE 可以這樣得到結果:
a = 0 * 20^5+0* 20^4+ 0* 20^3+ 0 *20^2 + 3*20 + 7 = 67
多組測試數據。
每組測試數據輸入兩個只包含大寫字母’A’-‘T’的字符串,表示兩個20進制數,字符串長度均小於200。
對於每組測試數據輸出一個用卡片表示的兩個20進制數的和,每組輸出占一行。AAA C
AAADH BCE
Output:
C
BFL
好久都沒有敲大數加法的代碼了,生疏了超多,做這道題的時候錯誤真不是一般的多,而且檢查的難度不是一般的高,建議廣大計算機小童鞋,這種大數的代碼沒事敲多幾次,這樣在臨時要的時候不至於拿著那種爛模板照著敲,要不然到時真不知道哪裡出錯了,改又不知道怎麼改,這才是最讓人頭疼的、、、
測試數據了N次,,終於過了,,一開始是T B的時候測不到,然後以為對了,沒想到還是錯了,
這裡再提示幾組測試數據吧,AAAA AA --> A TT B --> BAA T B --> BA
看一下我寫的猥瑣代碼吧,別吐口水哈各位靓仔靓女,別弄髒自己的電腦:
#include#include #include #include #define MAXN 256 #define RST(N)memset(N, 0, sizeof(N)) using namespace std; char str1[MAXN], str2[MAXN], ans[MAXN]; int a[MAXN], b[MAXN], d[MAXN], top; void ADD(int a[], int b[]) { int cnt = 0; for(int i=0; i = 20) d[i+1]++; //進位,這個函數修改的最多,真是有點浪費青春; } } int main() { while(~scanf(%s %s, str1, str2)) { RST(ans), RST(a), RST(b), RST(d); int L1 = strlen(str1), L2 = strlen(str2); int k1 = 0, k2 = 0; for(int i=L1-1; i>=0; i--) a[k1++] = (int)str1[i] - 'A'; //換成數字存儲; for(int i=L2-1; i>=0; i--) b[k2++] = (int)str2[i] - 'A'; ADD(a, b); int flag = 0; //標記輸出; for(int i=MAXN-1; i>=0; i--) { if(flag) { printf(%c, (char)(d[i]+'A')); continue; }else if(d[i]) { printf(%c, (char)(d[i]+'A')); flag = 1; } } if(flag == 0) puts(A); //0+0的情況,也就是全是A相加的情況; puts(); //換行 } return 0; }