编写一个程序,求满足如下条件的最大的n,1!+2!+3!+……+n!<=X,其中X由键盘输入。

作为初学者,被本题搞得焦头烂额,特此梳理思路

问题:

1、如何实现n项阶乘求和

2、如何判断 和<=X

3、编译过程中,如何防止int n 未初始化的问题(见错误示例)

错误示例

#include<iostream>
using namespace std;
int main()
{
   int n, sum=0;
   int r=1;
   int X;
   cin>>X;
   
 for(int i=1; i<=n; i++)
  {
     { r*=i;
       sum +=r;     
      }
    if (sum>X)
      break;
    cout<<n-1<<endl;}
    return 0; 
}

此时提示:

a.cpp: In function ‘int main()’:
a.cpp:10:16: warning: ‘n’ is used uninitialized in this function [-Wuninitialized]
  for(int i=1; i<=n; i++)
               ~^~~

在搜索引擎上查询,很难找到符合本题要求的解决方案。

只能已知变量n需要“赋值”(不知道能否如此理解),来帮助计算机利用变量n。

但是依题知,变量n决不能赋常量,否则输出结果为“常量-1”

(例如int X=100,n=100; 结果为99,而非4。)

那么关键在于如何在“赋值”的基础上,令n仍为“变量”。

于是我们对本题的变量n进行理解:n可以作为项数,并不是没有限制,而是随着i的自增而增大

(例如,i=1,n=1该项为1;  i=3,n=3,该项为6)

所以n与i有如下关系:i自增的同时,n也可以由小到大(n++),保持变化。

那么就可以令 int n=1; 同时在循环语句中使n自增。问题得解。

小白的正确答案:

#include<iostream>
using namespace std;
int main()
{
   int n=1, r=1;
   int sum=0;
   int X;
   cin>>X;
  for(int i=1; i<=n; i++,n++)
  {
      r*=i;
      sum +=r;     
      if (sum>X)
      {
         break;   
      }
  }    
    cout<<n-1<<endl;
    return 0;           
}

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值