gpt4 book ai didi

ruby - 余数 - 我的代码不正确,但为什么有效?

转载 作者:数据小太阳 更新时间:2023-10-29 08:23:36 27 4
gpt4 key购买 nike

昨天我完成了 Chris Pine 的“学习编程”一书中的练习 (9.5)。它是老式罗马数字转换器的整数。

我是这样做的:

def old_roman_numeral number
roman_number = ""
while number != 0
if number % 1000 == 0
number -= 1000
roman_number += "M"
next
elsif number % 500 == 0
number -= 500
roman_number += "D"
next
elsif number % 100 == 0
number -= 100
roman_number += "C"
next
elsif number % 50 == 0
number -= 50
roman_number += "L"
next
elsif number % 10 == 0
number -= 10
roman_number += "X"
next
elsif number % 5 == 0
number -= 5
roman_number += "V"
next
else
number -= 1
roman_number += "I"
end
end
roman_number.reverse
end

puts "Please enter any number and I convert it to"
puts "Old-school Roman numerals."
puts
num = gets.chomp.to_i
puts "Your number #{num} converted to Old-school Roman is:"
puts (old_roman_numeral num)

当我运行脚本时,它输出了正确的罗马数字。

例如 1200 => MCC

但是,当我今天醒来时,我想到的第一件事就是,这不对!1200 % 1000 的余数是 200 而不是 0!但是为什么输出的是MCC而不是CCCCCCCCCCCC???

最佳答案

如果你跟踪整个程序,它实际上首先匹配 % 100 == 0 两次,得到 CC,然后给你留下 1000。然后它匹配 % 1000 == 0,离开 CCM。最后它反转字符串,留下 MCC


旁注:解决这个问题的有趣方法,因为我可能会使用一堆 >= 比较以正向顺序构建字符串,并使用“减法”部分的特殊情况(IV IX)。尽管在第二次阅读时,此解决方案似乎输出 IIII 而不是 IV,因此特殊情况没有实际意义。

关于ruby - 余数 - 我的代码不正确,但为什么有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17399863/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com