2016-01-15 26 views
2

我正在研究使用Luhn Algorithm 驗證信用卡號碼的codewars kata。已經有了我的答案,它使用字符串轉換來分割數字,然後重新轉換爲整數,然後使用算法的其餘部分。一切都很好,直到我測試一個八進制數。如何避免在字符串轉換期間改變輸出的八進制,二進制等數字

代碼首先爲:

def validate(n) 
n.to_s.split("") #n = 7867 gives me ["7","8","6","7"], which is fine 
n.to_s.split("") #n = 0776 gives me ["5","1","0], when I need ["0","7","7","6"] 
n.to_s.split("") #n = 0100 gives me ["6", "4"] when I need ["0","1","0","0"] 
#other code here 
end 

其中,該方法應該在任何n被稱爲插入

如何防止一個八進制,二進制或十六進制等數轉換等。那?有沒有辦法保持數字,因此我可以使用它們?

+2

你從哪裏得到'n'的價值? –

+0

'n'只是插入該方法的任何數字。 'def validate(n)' –

+1

我的意思是你如何得到八進制數?你在程序中輸入數字文字嗎? –

回答

0

如果你在你的程序中使用數字文本,你可以明確地說,他們都是十進制:

n = 0d0100 # or "0100".to_i 
n.to_s.rjust(4,"0").split("") 
#=> ["0", "1", "0", "0"] 

此外,使用rjust使字符串形式的信用他們4位數字/借記卡有四個4位數字


要拆分一張信用卡整數數組,你可以這樣做如下:

cc = "4111 1111 1111 1111".gsub(/ /,"").split("").map(&:to_i) 
#=> [4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
+0

OH我明白你的意思是數字文字(我根本沒有數學意識)他們不是浮動或小數。它們只是多位整數。 –

+1

@siouxsie,它們甚至不是整數,它們只是由數字組成的字符串(並且可能空間也會很好)。將信用卡號碼轉換爲整數或其他數字類型或從整數或其他數字類型轉換爲任何地方都不適用。 – AnoE

1

你的問題是,你顯然存儲號碼爲n;否則你不需要說n.to_s

必須有一個地方,這些數字進入你的程序;用戶提示,或通過閱讀文件或其他。某處可能有類似n = user_input.to_i的東西,迫使ruby將字符串轉換爲數字。確保你將n當作字符串處理,並且前導零將保留。

+0

這是卡塔的一部分。我編輯了這個問題來說明問題。這只是一個混亂結果的方法的一部分。那麼,它會工作將'n'轉換爲一個整數,然後一個字符串分裂? –

+2

這是缺少重點。如果你想處理前導零,你不能將'n'轉換爲數字類型 - 它們都不會保持零。你的問題不在於你在這裏發佈的方法,而在於來自「n」的地方。 – AnoE

+0

哦,我明白了。謝謝! –

相關問題