>author: Utin ## Question ![](https://hackmd.io/_uploads/r1JjfN0oh.jpg) 神射手丁特過年時去TOYZ家玩射龍門,原本小賺了一波,突然神射手特哥臉色特變,龍門射歪直接輸到脫褲,由於賭注籌碼巨大到可以製作超過471次的紫布,請幫丁特計算一下他總共要賠多少錢。 ### Input 有兩行數字,每三位會用逗號隔開 ### Output 請輸出兩數的和,並且每三位要用逗號隔開,最後請輸出'\n' ### Constraint 輸入的位數 <= 20 ### Sample Input ```= 100,200,300 100,200,700 ``` ### Sample Output ```= 200,401,000 ``` ## 作法 迴圈搭配陣列,一位一位處理,跟加法器很像 ## 常見問題 - scanf 記得取址 - 注意逗號輸入 / 輸出的問題 - 陣列要開得夠大 - 注意進位問題 ## 解法 ```c= #include <stdio.h> int a[21], b[21], sum[21], len_a = 0, len_b = 0, len_max; char input_a[21], input_b[21]; int main() { // input char input; while ((input = getchar()) != '\n') if (input != ',') input_a[len_a++] = input; while ((input = getchar()) != EOF) if (input != ',') input_b[len_b++] = input; // get the max len of a and b len_max = len_a > len_b ? len_a : len_b; // reverse the array for (int i = 0; i < len_a; i++) a[i] = input_a[len_a - i - 1] - '0'; for (int i = 0; i < len_b; i++) b[i] = input_b[len_b - i - 1] - '0'; // add a and b bit by bit for (int i = 0; i < len_max; i++) { sum[i] += a[i] + b[i]; sum[i + 1] += sum[i] / 10; sum[i] %= 10; } // output if (sum[len_max]) printf("%d", sum[len_max]); for (int i = len_max - 1; i >= 0; i--) { if (i % 3 == 2 && i != len_max - 1) printf(","); printf("%d", sum[i]); } printf("\n"); } ```