我正在尝试编写一些代码来测试一个数字是否是 Kaprekar 数字。我环顾四周,看看是否有人已经提出了这个问题,但我没有找到足够的信息,所以我把我的烦恼带给你。
什么是 Kaprekar 数:
对于具有 n 位的 Kaprekar 数 k,如果将其平方并将右侧的 n 位添加到左侧的 n 或 n-1 位,则结果和为 k。9 就是一个例子,因为 9^2=81,并且 8+1=9。
这是我现在整理的:
def kaprekar?(k)
if k**2.to_s.length % 2 == 0
split_k_array = k**2.to_s.split(//)
half_k_array_length = split_k_array.length / 2
i = half_k_array_length
x1 = 0
while i > 0
x1 = x1 + (10**i * split_k_array[i-1])
i = i - 1
end
x2 = 0
i = split_k_array.length
while i > half_k_array_length
x2 = x2 + (10**(i-half_k_array_length))
i = i - 1
end
if k == x1 + x2
return true
else
return false
end
else
puts "Let's figure out what wrong with the other code first :("
return "Meh"
end
end
if kaprekar(500500)
puts "500500 is True :)"
else
puts "500500 is False :("
end
if kaprekar(9)
puts "9 is True :)"
else
puts "9 is False :("
end
if kaprekar(22) puts "22 is True" else puts "22 is False" end
此代码没有返回任何错误,但只要 k 的平方是偶数位长,无论提供的数字是否为 Kaprekar 数,该方法都会返回值 True。事实上,即使我将测试部分更改为:
if x1 + x2 = k
return false
else
return false
end
...我仍然得到 True 返回给我!这怎么可能?
任何帮助,将不胜感激!
编辑1:我将真值赋值改为“==”而不是“=”,并将“^”指数更改为“**”。但是,在上述两种情况下,我仍然得到“真实”返回给我。:(
编辑 2:似乎我错过了 2 个“^”!解决它!
编辑 3:每次运行代码时添加一些代码来测试 Kaprekar 方法。修复了在线错误(好像我试图分割字符串的长度,而不是字符串本身。天哪!)。无论如何,现在我收到错误消息:“kaprekarTest.rb:37: undefined method `kaprekar' for main:Object (NoMethodError)” 现在,我刚刚定义了 kaprekar 方法。为什么我会收到一个错误说没有这种方法?