计算将数字表示为C ++中连续数字之和的方法
给定整数n作为输入。目的是找到将“num”表示为两个或多个连续自然数之和的方式数量。例如,如果n为3,则可以表示为和(1+2),因此总计为1。
例如
输入值
num=6输出结果
将数字表示为连续数字的总和的方法有: 1
说明
The ways in which we can express ‘num’ as sum of consecutive natural numbers: 1+2+3
输入值
num=19输出结果
将数字表示为连续数字的总和的方法有: 1
说明
The ways in which we can express ‘num’ as sum of consecutive natural numbers: 9+10
以下程序中使用的方法如下-
在这种方法中,我们将数字表示为(a+a+1+a+2…..+a+i)的总和。
变成(a)(L+1)次+1+2+3+4…+i=a*(i+1)+i*(i+1)/2。(i个自然数的总和)num=a*(i+1)+i*(i+1)/2.a=[num-(i)*(i+1)/2]/(i+1)
我们将对i=1到i*(i+1)/2小于num进行此操作。
以整数num作为输入。
功能sum_consecutive(intnum)接受一个num并返回将“num”表示为连续自然数之和的方式计数。
将初始计数设为0。
将临时变量res用作float。
使用从i=1到i*(i+1)/2<num的for循环遍历。
计算值[num-(i)*(i+1)/2]/(i+1)并存储在res中。
如果res为整数(res-(int)res为0),则递增计数。
最后,我们将num表示为连续自然数之和的方式。
返回计数作为结果。
示例
#include <bits/stdc++.h> using namespace std; int sum_consecutive(int num){ int count = 0; int temp = num * 2; float res; for (int i = 1; i * (i + 1) < temp; i++){ int store = i + 1; res = (1.0 * num−(i * (i + 1)) / 2) / store; float check = res − (int)res; if(check == 0.0){ count++; } } return count; } int main(){ int num = 20; cout<<"将数字表示为连续数字的总和的方法有: "<<sum_consecutive(num) << endl; return 0; }输出结果
如果我们运行上面的代码,它将生成以下输出-
将数字表示为连续数字的总和的方法有: 1