计算将数字表示为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