21xrx.com
2024-12-22 20:12:59 Sunday
登录
文章检索 我的文章 写文章
求解C++程序中1*2*3+3*4*5+…+99*100*101的值
2023-07-04 17:55:09 深夜i     --     --
C++ 求和 乘积 循环 算法

方法一:暴力循环

首先,我们可以利用for循环,依次计算出每一个乘积的值,再将它们相加即可。具体实现方法如下:


#include<iostream>

using namespace std;

int main()

{

  long long sum=0; // 定义总和变量

  long long product=1; // 定义乘积变量

  for(int i=1; i<=99; i+=2) // 循环计算

  {

    product *= i*(i+1)*(i+2);

    sum += product;

  }

  cout<<sum<<endl; // 输出结果

  return 0;

}

需要注意的是,由于乘积很大,容易超出long long类型的表示范围,因此我们需要在每次计算乘积时进行类型转换,将其转为long long类型。

方法二:递归函数

另一种实现方法是使用递归函数。考虑这个求和公式:

$$S=1\times2\times3+3\times4\times5+...+99\times100\times101$$

可以发现,每一项都可以拆分为$3$个连续的数的乘积,那么我们可以先定义一个函数,用递归的方式计算每个连续的乘积:


long long get_product(int start, int end)

{

  if(start > end)

    return 1;

  else

    return start * (start+1) * (start+2) * get_product(start+3, end);

}

这个函数的功能是计算从start到end这一段连续的数的乘积。如果start已经大于end,返回1,表示递归结束。否则,返回start、start+1和start+2的乘积,再乘以调用函数get_product(start+3, end)的返回值,即start+3到end这一段连续的数的乘积。

然后,我们只需要在主函数中依次调用这个函数,计算出每个连续的乘积,再将它们相加即可。具体实现方法如下:


#include<iostream>

using namespace std;

long long get_product(int start, int end);

int main()

{

  long long sum=0; // 定义总和变量

  for(int i=1; i<=99; i+=2) // 循环计算

    sum += get_product(i, i+2);

  cout<<sum<<endl; // 输出结果

  return 0;

}

long long get_product(int start, int end)

{

  if(start > end)

    return 1;

  else

    return start * (start+1) * (start+2) * get_product(start+3, end);

}

这种实现方法相对简单,也不需要考虑乘积超出类型表示范围的问题。但是,递归会增加堆栈的开销,如果数字过大,可能会出现堆栈溢出的问题。因此,需要根据具体情况选择合适的实现方法。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复