我想输入2个数字并计算这2个数字之间的数字之和。 例如(1,3)1 + 2 + 3 = 6
我尝试了下面的代码,该代码具有2个肯定值,但是这并不会增加正值+否定值,并且每次都会返回0
def get_sum(a,b)
if a > b || a < b
num_array = (a..b).to_a.sum
puts num_array
else
puts a
end
end
get_sum(2,-3)
预期-3而是返回0
答案 0 :(得分:6)
您想要一个代数级数的总和。
def get_sum(a,b)
((a-b).abs+1)*(a+b)/2
end
get_sum( 1, 4) #=> 10
get_sum( 4, 1) #=> 10
get_sum(-4, -1) #=> -10
get_sum(-1, -4) #=> -10
get_sum(-3, 4) #=> 4
get_sum( 4, -3) #=> 4
get_sum(-4, 3) #=> -4
get_sum( 3, -4) #=> -4
(a-b).abs+1
是系列中元素的数量。
答案 1 :(得分:4)
如果结束值大于开始值,您可以做的是颠倒数字的顺序:
a, b = b, a if a > b
根据“ Ruby编程”一书,Range对象存储范围的两个端点,并使用.succ成员生成中间值。
答案 2 :(得分:0)
只是为了好玩,混搭Ruby 2.6:
x, y = 2, -3
[x,y].tap{ |a| a.reverse! if a[0] > a[1] }.then{ |x,y| (x..y).sum }
#=> -3
答案 3 :(得分:0)
(x..y).to_a.sum
其中x是范围起始数字,y是最后一个元素。
参考:
https://ruby-doc.org/core-2.2.0/Range.html