我正在研究卡普雷卡的号码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]squaresquare[0..no_of_digits-2]否则

关于ruby - 找出Kaprekar的号码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28436497/

10-11 14:45