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



这是我使用的代码,其目的是让用户输入整数,然后该程序将获取所有数字的总和,包括输入的数字。可能有一种更简单的方法来执行此操作

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

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

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

演示

P.S。正如您可能注意到的那样,您可以在使用.to_i时省略.chomp

是的,使用类似的东西(来自ActivesUpport的sum

sum = (counter + 1).times.sum

或没有ActiveSupport:

sum = (counter + 1).times.inject(&:+)
num = gets.to_i
sum = num*(num+1)/2

如果我正确理解您,您可以尝试这样的事情...

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/enumosit.html#method-i-inject中了解有关"注入"方法的更多信息。

希望这会有所帮助!

,据我了解,您正在尝试汇总范围的元素。给出3,您想获得6个。

一种方法(耗时)是使用injectsum。您可以尝试以下内容:

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

另一个(推荐),非常有效的方法是使用此方程:

(value + 1) * (value) / 2

最新更新