获取范围内的数字总和(从0到用户输入)

时间:2015-05-05 18:28:41

标签: ruby sum

这是我正在使用的代码,其目的是让用户输入一个整数,程序将获取所有数字的总和,包括输入的数字。有可能更简单的方法来做到这一点

 sum = 0
 puts "please enter a number"
 counter = gets.chomp.to_i
 begin
  sum += counter
  counter -= 1
 end while counter == 0

5 个答案:

答案 0 :(得分:1)

您的代码问题在循环中处于counter == 0条件,因为它只运行一次,如果count不等于0(换句话说,如果用户&# 39; s输入不是1),它停止了。您不仅可以在不使用循环的情况下进行此操作,还可以缩短整个过程:

counter = gets.to_i
sum = (0..counter).inject(:+)

Demo

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的总和。

单向(耗时)是使用injectsum。您可以尝试以下操作:

1. [*1..value].sum
2. [*1..value].inject(:+)

另一种(推荐),非常有效的方法是使用这个等式:

(value + 1) * (value) / 2