[CS]CS50 Week 1: C

Penny N.
Sep 3, 2020

--

Assignment 1: Mario (more comfortable)

條件:

使用#來模擬超級瑪莉兄弟中的金字塔。根據使用者輸入的高度,若為1到8,則在terminal印出金字塔。若使用者輸入的數字不為1到8的整數,則繼續要求使用者輸入。

Assignment 2: Credit

條件:

American Express、Master Card、Visa 三種卡別有特定的長度及首數。且卡號的偶數位數字乘2後相加(若偶數位數字乘2大於10則要將結果的兩位數字先相加),再加上奇數位數。若總和為10的倍數,則為正確的卡號。

先判斷卡號的長度及開頭是否符合三種卡的任一種。

If (card_num長度為15位數 && 開頭為34或37)
{
可能為american express
再判斷card_num是否valid
}
Else if (card_num長度為16位數 && 開頭為51~55)
{
可能為master card
再判斷card_num是否valid
}
Else if (cardNum長度為13或16 && 開頭為4)
{
可能為visa
再判斷card_num是否valid
}
Else
{
invalid
}

再判斷卡號是否符合Luhn’s Algorithm的規則。

使用for loop利用卡號 % 10取得最後一位數,並且在每次執行後將卡號除10,按照奇數位、偶數為位逐次處理加總,並判斷最後加總%10是否為零,即可得到結果。

在判斷卡號首數的部分,我直接使用 card_num / 10000000000000 來判斷首數是否為34。原本想將10000000000000用1e13代替,卻發現明明正確的卡號卻被判斷為invalid。在stack overflow發問後才知道1e13會是double type,導致card_num / 1e13後得到的結果被判別為invalid。

--

--

Penny N.
Penny N.

Written by Penny N.

A passionate self-taught  iOS developer. Write to record my learning and share the knowledge

No responses yet