---
# System prepended metadata

title: 神射手丁特
tags: [Day2]

---

>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");
}
```
