Ruby 获取范围内的数字总和(从0到用户输入)
这是我正在使用的代码,它的目的是让用户输入一个整数,然后程序将获取所有数字的总和,包括输入的数字。可能有一种更简单的方法可以做到这一点Ruby 获取范围内的数字总和(从0到用户输入),ruby,sum,Ruby,Sum,这是我正在使用的代码,它的目的是让用户输入一个整数,然后程序将获取所有数字的总和,包括输入的数字。可能有一种更简单的方法可以做到这一点 sum = 0 puts "please enter a number" counter = gets.chomp.to_i begin sum += counter counter -= 1 end while counter == 0 是的,使用类似的方式(sum来自ActiveSupport): 或者没有ActiveSupport: s
sum = 0
puts "please enter a number"
counter = gets.chomp.to_i
begin
sum += counter
counter -= 1
end while counter == 0
是的,使用类似的方式(
sum
来自ActiveSupport):
或者没有ActiveSupport:
sum = (counter + 1).times.sum
sum = (counter + 1).times.inject(&:+)
代码的问题在于循环中的
counter==0
条件,因为它只运行一次,如果count
不等于0
(换句话说,如果用户的输入不是1
),它将停止。您不仅可以在不使用循环的情况下完成此操作,还可以缩短整个过程:
counter=get.to_i
总和=(0..计数器)。注入(:+)
另外,正如您可能已经注意到的,当您使用
时,您可以省略.chomp
。\u i
如果我理解正确,您可以尝试这样的方法
puts "Please enter a positive number..."
number = gets.chomp.to_i
puts "Sum of all numbers is: #{ (1..number).inject { |sum, n| sum + n} }"
我使用可枚举方法“注入”来总结总数。了解有关“注入”方法的更多信息,请访问
希望这有帮助 据我所知,您正在尝试对范围的元素求和。给出数字3,你想得到的和是6 一种方法(耗时)是使用
inject
或sum
。您可以尝试以下操作:
1. [*1..value].sum
2. [*1..value].inject(:+)
另一种(推荐的)非常有效的方法是使用以下等式:
(value + 1) * (value) / 2
由于计数器在每次迭代中递减,不会产生相同的结果,因此您的循环只执行一次(如果输入为1,则执行两次),因为在大多数情况下,计数器与0不同,如@RuneFS所说,如果您将计数器更改为
end while counter!=0,则代码的问题在于end while counter==0
0
,它可以做你想做的事。我完全错过了这是求和级数之和的基本纯数学解!非常感谢你!
(value + 1) * (value) / 2