计算将数字表示为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(int num) 接受一个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

猜你喜欢