我正在研究卡普雷卡的号码https://rubymonk.com/learning/books/1-ruby-primer/problems/150-kaprekar-s-number的问题我在这里介绍的代码,前面已经讨论过了,但是我对另一个方面感兴趣。练习要求:
找出一个给定的数字是否是Kaprekar数。
练习下面有一个解决方案(请参见解决方案),如下所示:
def kaprekar?(k)
no_of_digits = k.to_s.size
square = (k ** 2).to_s
second_half = square[-no_of_digits..-1]
first_half = square.size.even? ? square[0..no_of_digits-1] : square[0..no_of_digits-2]
k == first_half.to_i + second_half.to_i
end
是暗示(需要暗示?)下面的练习还包括:
使用Fixnum.to_s将数字转换为字符串to do数字
操作。使用String.to_i将其转换回整数。
我有几个问题,谁能解释一下:
1)为什么需要将数字转换成字符串来进行数字运算?
2)在第二个半变量中,我理解-(负号)是正方形的背面,但它的意思是-1它必须是左侧(前半部分)n或n-1位,而不是后半部分或者是结束引号,因为我们把数字转换成了字符串?
3)为什么前半个变量中有两个问号-在“偶数”之后和“平方”之前?
最佳答案
1)为什么需要将数字转换成字符串来进行数字运算?
因为你必须得到下半场:
second_half = square[-no_of_digits..-1]
这里处理弦比较方便这将返回最后的
no_of_digits
,例如。'1234'[-2..-1] # => '34'
-2..-1
是一个range的数字,不可能直接得到整数位置的范围。在第二个半变量中,我知道-(减号)是正方形的背面,但它的意思是-1它必须是左侧(前半部分)n或n-1位,而不是后半部分或者是结束引号,因为我们把数字转换成了字符串?
-1
是最后一个元素即'1234'[-1] # => 4
类似地,
-n
是最后一个元素的第n个,其中n
是一个整数3)为什么前半个变量中有两个问号-在“偶数”之后和“平方”之前?
第一个问号是方法名的一部分。根据约定,返回布尔值的方法应以问号结尾注意
kaprekar?
也不例外。二是三元条件算子的一部分如下所示:
boolean_expression ? true_expression : false_expression
即,如果
first_half
中的字符数为偶数,则square[0..no_of_digits-1]
为square
或square[0..no_of_digits-2]
否则关于ruby - 找出Kaprekar的号码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28436497/