2016-01-15 23 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

哦,我明白了。谢谢! –

相关问题