我正在解決Kaprekar號碼https://rubymonk.com/learning/books/1-ruby-primer/problems/150-kaprekar-s-number的問題。代碼,我在這裏,前面已經討論過了,但我對另一個方面感興趣。練習要求:查找Kaprekar的號碼
查找給定的數字是否是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將該數字轉換爲一個字符串來執行數字 操作。使用String.to_i轉換回整數。
我有幾個問題,誰能給我解釋一下:
1)爲什麼它需要將數字轉換成字符串做位操作? 2)在second_half變量中,我明白 - (減號)符號是方格的背面,但它是什麼意思:-1?它必須是左側(first_half)n或n-1個數字而不是second_half。或者它是否以引號結束,因爲我們將數字轉換爲字符串?
3)爲什麼在first_half變量中有2個問號 - 在'even'之後和'square'之前?
有關問題#1的OP註釋:儘管你可能會寫一些你計算機程序源代碼是一系列十進制數字,如'2345',計算機通常會將其轉換爲某種二進制格式(如[二進制補碼](http://en.wikipedia.org/wiki/Two%27s_complement )),因爲這些格式對於計算機來說更容易處理。所以如果你想使用數字的十進制數字,你需要將它轉換回知道數字的形式。一種合理的方法是將其轉換爲字符串。 – 2015-02-10 17:16:03