qq_16963345 2015-05-07 08:34 采纳率: 0%
浏览 1597

关于C++循环的一个循环问题

原题是求1-20各数的阶乘之和,我想用二重循环来做,代码如下:但是最终结果却与正确答案似乎不一样:
#include
using namespace std;
int a=1, b=0;
int m, n;
int main()
{
for (m = 1; m <= 20;m=m++)
{
for (n = 1; n <= m-1; n = n++)
a = a*n;
b = b + a;
}
cout << b << endl;
return 0;
}

老师提供的正确答案如下:
#include "stdafx.h"
#include
using namespace std;
int a=1, b=0;
int m, n;
int main()
{
for (m = 1; m <= 20;m=m++)
{
a = a*m;
b = b + a;
}
cout << b << endl;
return 0;
}

我用VS2015追踪得到的结果是第一个代码中最终a=0,第二个a= -2102132736
·················请问这到底是怎么回事ORZ············初学者求教啊

  • 写回答

4条回答 默认 最新

  • 搬不搬砖 2015-05-07 09:09
    关注

    关于第二个a=-2102132736,20的阶乘你用计算器算一下就知道是多少,这个很明显是溢出了,int类型无法满足,换成unsigned long long a=1, b=0;
    关于你自己写的,要注意的是里面一个循环之前要加上a=1;这一句,原因自己想想。里面一个循环的循环条件也不对,不要-1吧,
    还有,m=m++这样的写法,你确定没有写错?

    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作