21xrx.com
2025-04-03 21:15:17 Thursday
文章检索 我的文章 写文章
求解C++程序中1*2*3+3*4*5+…+99*100*101的值
2023-07-04 17:55:09 深夜i     11     0
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);
}

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

  
  

评论区