---
# System prepended metadata

title: CP1 HW02補充說明
tags: [HW02, "CP1\_"]

---

# HW02 補充說明

:::info
作業發出後，任何更新將會寫於此

2.1 更新 1. 及 2.
2.2 「乘數」為一位數的情況？（「被乘數」為一位數時不屬於這情況）
2.4 更新大量補充說明
2.1 更新 1. 
2.2 0 ~ $2^{31}$，更新為0 ~ $2^{31}$-1
2.5 (2023/10/23 更新)新增 alignment 的說明

:::

## 2.1 $\sqrt{2}$

1. 請四捨五入輸出到小數點後 15 位，並且僅只輸出 15 位。
歡迎各位使用更精準的小數資料型態，避免相關問題產生。
2. 可以使用 <math.h>，但不能使用 function 及 Array。

## 2.2 Multiplication v2
- 是否能使用 array 或是 loop？
    > 可以使用 loop ， 盡量使用，但不能使用 array
- 是否會有 uint32_t 無法讀入的情況
    > 會，所以請用 int64_t 讀入，此題保證 int64_t 可讀入
- 輸入合法的範圍？
    > 0 ~ $2^{31}$-1，其餘皆為錯誤輸入
- 各位數間是否必須輸出空格？
    > 是
- 「乘數」為一位數的情況？（被乘數為一位數時不屬於這情況）
    > 不需再顯示第二層的計算過程，直接顯示答案
    > ![](https://hackmd.io/_uploads/S1mfUTqkp.png)
- 寬度是否要依照最長數字改變
    > 是
    > ![](https://hackmd.io/_uploads/HkacvLXy6.png)
- 各位運算時出現 0 的情況 ex. 13 * 10
    > 你在加法階段仍須輸出一行 0 
    ![](https://hackmd.io/_uploads/SkcW-UQyp.png)
- 出現乘數被乘數為 0 的情況
    > 直接顯示 0
![](https://hackmd.io/_uploads/SkMjF9Ckp.png)
- 為避免又有人格式錯，以下這筆資料當作參考測資
```
                    2 9 4 9 7 0 9 8 2 
*)                1 2 5 7 4 8 0 9 7 0 
-------------------------------------
                                    0 
                2 0 6 4 7 9 6 8 7 4 
              2 6 5 4 7 3 8 8 3 8 
                              0 
          2 3 5 9 7 6 7 8 5 6 
        1 1 7 9 8 8 3 9 2 8 
      2 0 6 4 7 9 6 8 7 4 
    1 4 7 4 8 5 4 9 1 0 
    5 8 9 9 4 1 9 6 4 
  2 9 4 9 7 0 9 8 2 
-------------------------------------
  3 7 0 9 2 0 3 9 6 5 6 7 2 1 2 5 4 0 
```

## 2.3 Non-deterministic Finite State Machine

此題不進行語法限制。

但設有以下成就：

- 成就：完成作業
- 成就：僅使用一個 8-bit 大小變數儲存完整狀態機狀態
- 成就：僅使用 64-bit 大小變數運算完成狀態儲存與狀態轉移

完成成就的話，或許會得到成就感。

## 2.4 Dollar Cost Averaging Calculator

- 輸入規則
    - $1 \leq Initial\ Investment \leq 10^7$
    - $0 \leq Recurring\ Monthly\ Investment \leq 10^7$ 
    - $1 \leq Start\ Month \leq 12$ 
    - $1 \leq Start\ Year \leq 10^4$ 
    - $1 \leq End\ Month \leq 12$ 
    - $1 \leq End\ Year \leq 10^4$ 
    - $1 \leq Rate \leq 100$ 
    - 輸入皆為整數型態
    - 時間範圍要至少大於等於一個月
    - 其餘例外狀況皆要做非法處理

- 輸出規則
    - 輸出分別是：累積本金/累積總金額/累積淨收入/報酬率
    - 累積本金、累積總金額、累積淨收入皆為整數，無條件捨去
    - （放寬限制）累積本金/累積總金額/累積淨收入/報酬率如果其中有數值大於等於 $10^{15}$，請輸出 \*/\*/\*/\*%
    - 報酬率 = 累積淨收入/累積總金額（四捨五入至小數點第二位），並且輸出的小數點後結尾不能為 0
    - 請輸出至結束的前一個月份
        - 以題目範例就是 2023/12/1 ~ 2043/11/31 整20年
    - 如在計算過程中有小數的情況，請如實計算，在輸出時符合格式即可

- 程式呈現畫面請按照題目範例呈現的格式
    - e.g. 年月份格式
> 題目下面的 ... 是範例後續的輸出示意，不是範例呈現的格式

- 程式輸出範例

![](https://hackmd.io/_uploads/HJxVl9HZ6.png)

> 以上範例提供大家參考

老師提供的網址只是要讓大家明白投資的概念以及作業的需求，但是網站的輸出數值並不一定完全相等於作業要求的輸出數值，每個網站細部的實作方式可能都會影響到些微不同的結果，e.g. double 精度問題、int 型態範圍、小數點捨去規則不相同等，但請大家先按照補充說明內容去實作

- 這裡再提供有月複利的網站給大家：[複利計算機](https://fical.net/zh-hant/%E5%AE%9A%E6%9C%9F%E5%AE%9A%E9%A1%8D%E8%A4%87%E5%88%A9%E8%A8%88%E7%AE%97%E6%A9%9F
)

## 2.5 Catan Simple Islands Engine

- 使用陣列特別優惠，得分打 5 折！
- 可以使用 function
- 那個紫紫的建築物或許對你有幫助哦~
- 加油！
- (10/13 更新) 題目有規定地圖要印在左上角，也就是說最左邊/最上面都不能發生整欄(column)都是空的/整列(row)都是空的情況。如果最左邊有空的情況，該筆測資會算全錯。如果最上面有空的情況，會斟酌扣分，但空越多行會扣越多分。
以 L=3, N=1 為例，正確的輸出應該會是:
```=
Please input the length: 3
Please input the number of layer: 1
  *-*  
 /   \ 
*     *
 \   / 
  *-*  
```
如果是下面的輸出則算全錯:
```=
Please input the length: 3
Please input the number of layer: 1
   *-*  
  /   \ 
 *     *
  \   / 
   *-*  
```
如果是下面的輸出會斟酌扣分:
```=
Please input the length: 3
Please input the number of layer: 1

  *-*  
 /   \ 
*     *
 \   / 
  *-*  
```

## 2.6 Bonus: What Happens??

:::info
為了方便大家，C11 的連結我就貼在這邊了 [link](https://drive.google.com/file/d/1BGSbEazY5azERlFtP9DfmTTHgj-0AjY7/view)

記得善用 ctrl + f 去找尋關鍵字，有空的話也可以讀一下 uint 跟 int 在比大小時的轉換，這對於在寫 C 的你們在之後 debug 時可能會比較容易找到這些 bug.
:::