2017-01-05 30 views
1

我參加了edx.org的CS50課程;它被稱爲計算機科學入門。如何從長長的數字中分離殘留物?

我想解決第一週的問題集。所以用戶輸入信用卡號碼,我必須開發某種算法來檢查它的號碼是否有效。爲此,我需要將整個16位數字分隔爲數字。我被困在這裏。我想我需要循環做這件事,每一步都要一步一步地做到這一點,爲此我想將用戶的輸入分成10步,並以某種方式得到殘留物。

由於int對其可容納的位數限制,我無法轉換爲int型。我怎樣才能實現這種功能?我嘗試了這一點,但後來意識到它導致了什麼......至少乍一看。 cre_num住信用號碼。

long long check(long long cre_num) 
{ 
    double part, i; 

    for (i = 0.1; i <= 1; i = i+0.1) 
    { 
     if (cre_num/10 == i) 
     { 
      part = i; 
     } 
    } 
    return part; 
} 
+0

Got it!非常感謝你,沒有想到這種實現。 –

+1

'long long'值'cre_num/10'永遠不會等於0.1到0.9範圍內的double值。它*可能*等同於'1.0',但是循環中的'i'可能永遠不會是'1.0',因爲浮點數是「破碎的」,當添加不必要的不​​準確編碼時,將0.1添加到自己9次並期待它等於'1.0'。如果卡號是逐位輸入的:如果您想檢查每個數字,則保留它。 –

+0

你應該包括cs50標籤 –

回答

3

您需要將一個數字的16位數字(long int)放入一個向量或種類中?

當您%的數10,你得到了它的最後一位數字,例如:

13%10 = 3 
3%10 = 3 (03 = 3) 
523%10 = 3 

因此,如果您%10,你得到的最後一位,並把你的載體,而且比你/ 10,因爲/ 10將刪除最後一位數字,即您已經保存的數字。

如果你想,我可以嘗試編碼它,但我認爲你已經完成了這種工作。

+0

這意味着我沒有聽說有關數組和矢量的任何事情。但它是一個很好的,非常感謝你。我已經建議圍繞ASCII跳舞,所以我猜這是關鍵。無需編碼,我只是尋找想法。再次感謝你,祝你有美好的一天。 –

+0

哦,好的。如果你只是想要這個想法,忽略我想要「存儲」你的數據的第二部分。祝你有個美好的一天=) –