这是我正在使用的代码,其目的是让用户输入一个整数,程序将获取所有数字的总和,包括输入的数字。有可能更简单的方法来做到这一点
sum = 0
puts "please enter a number"
counter = gets.chomp.to_i
begin
sum += counter
counter -= 1
end while counter == 0
答案 0 :(得分:1)
您的代码问题在循环中处于counter == 0
条件,因为它只运行一次,如果count
不等于0
(换句话说,如果用户&# 39; s输入不是1
),它停止了。您不仅可以在不使用循环的情况下进行此操作,还可以缩短整个过程:
counter = gets.to_i
sum = (0..counter).inject(:+)
P.S。您可能已经注意到,在使用.chomp
时可以省略.to_i
。
答案 1 :(得分:0)
是的,请使用类似这样的内容(来自ActiveSupport的sum
):
sum = (counter + 1).times.sum
或没有ActiveSupport:
sum = (counter + 1).times.inject(&:+)
答案 2 :(得分:0)
num = gets.to_i
sum = num*(num+1)/2
答案 3 :(得分:0)
如果我理解正确,你可以尝试这样的事情......
puts "Please enter a positive number..."
number = gets.chomp.to_i
puts "Sum of all numbers is: #{ (1..number).inject { |sum, n| sum + n} }"
我使用了可枚举的方法'注入'总结一下。详细了解'注入'方法http://ruby-doc.org/core-2.2.2/Enumerable.html#method-i-inject。
希望这有帮助!
答案 4 :(得分:0)
据我所知,你正试图总结范围的元素。给3号,你想得到6的总和。
单向(耗时)是使用inject
或sum
。您可以尝试以下操作:
1. [*1..value].sum
2. [*1..value].inject(:+)
另一种(推荐),非常有效的方法是使用这个等式:
(value + 1) * (value) / 2