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

问题描述

关于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············初学者求教啊

解决方案

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

解决方案二:

楼主的代码问题多多。
其中主要的问题是外层循环结束a没有复位,内层循环的边界有很多的问题。

老师的代码是正确的,但是定义了一个n没有使用
老师的思路不是很直接,但是也很清晰
a随着循环变量m记录m!
而b=1!+……+m!

解决方案三:

多练基本功。m=m++和m++是等效的,这种写法让人费解。两层循环会导致时间复杂度上升,没有必要,逻辑也没有写对。

解决方案四:

如果出现负数,说明溢出了,int最大只能表示21亿,换double或者long long看看

时间: 2024-08-30 22:16:25

c++-关于C++循环的一个循环问题的相关文章

希望建立一个循环,i值从start递变到end,不知道该怎么写

问题描述 希望建立一个循环,i值从start递变到end,不知道该怎么写 假如end>start,那么可以 for(int i=start,i<=end,i++){} 假如end for(int i=start,i>=start;i--){} 有没有写法可以统一一下,不要分开来写 解决方案 1.循环前先判断, int small=end>start:start?end; int max=end>start:end?start; for(int i=small,i<=ma

c语言-这是我函数中的一个循环,哪位亲帮我看看哪出了问题

问题描述 这是我函数中的一个循环,哪位亲帮我看看哪出了问题 这是我函数中的一个循环,哪位亲帮我看看哪出了问题 for(i=0;i<144;i++) { int n=i/12; double x0=0.0;double z0=n*3.0+1.5;//射线始点 //double x=x0;double z=z0;//转换点 if(ray[i].slope>0.0) { double X1[13]={0.0};double Z1[13]={0.0};//用纵向线截得的点到射线始点的长度 double

游戏编程-LUA:前面的函数循环播放一个动作,后面的BUFFEND函数生效后怎么打断前面函数的动作

问题描述 LUA:前面的函数循环播放一个动作,后面的BUFFEND函数生效后怎么打断前面函数的动作 local y; function action(y) while y== 0 do player:doaction(""asdasd"") player:settime(falsehanshu1""1000) endend function hanshu1() local player:doaction(""asdasdad&

jquery问题 一个循环父元素里的button点击后 获得该父元素的ID

问题描述 jquery问题 一个循环父元素里的button点击后 获得该父元素的ID 比如 <div id="fys"> <button id="comment" class="ysce"></button> <textarea id="commentconten" name="message" ></textarea> <button id

c++写一个循环来查找指定进程 不知道该怎么写?求代码

问题描述 c++写一个循环来查找指定进程 不知道该怎么写?求代码 c++写一个循环来查找指定进程 不知道该怎么写?求代码 网上找了不少资料单老是编译出错 求大神指点 解决方案 用CreateToolhelp32Snapshot 参考:http://blog.csdn.net/zhongbin104/article/details/7867309 解决方案二: BOOL FindProcessByName(LPCTSTR szFileName, PROCESSENTRY32& pe) { // 采

java代码-我写了一个循环语句, 有异常出现,请问怎么解决?

问题描述 我写了一个循环语句, 有异常出现,请问怎么解决? class SimpleException extends Exception {}public class C {static int i=1; C(){ try{ int j=i++; if( j>6000) throw new SimpleException(); System.out.println(j); }catch(SimpleException e){} finally{ new C(); } }public stati

jquery each-jQuery each循环中隔一段时间后,再执行下一个循环

问题描述 jQuery each循环中隔一段时间后,再执行下一个循环 初步涉及脚本,请各位大神给予帮忙. 脚本如下,在执行ajax异步调用后,会到后台执行相关方法,需要时间等待.所以需要延长时间后再进入第二次循环.请问怎么实现?是用setTimeOut吗?又怎么实现? $('#btnExecute').click(function(){ $('#tbFileList').find(":checkbox:checked").each(function(){ var filename= $

代码-求php大神能帮写一个 循环

问题描述 求php大神能帮写一个 循环 其他大神提供个想法也行 想破脑袋了 也不行,ps 因为其他地方也要调用,所以输出div 走不通 <div> {foreach item=vo from=$shouji name=foo key=key} <!--{if $smarty.foreach.foo.index < 3}--> <a href="category.php?id={$vo.id}" data="{$vo.id}">

js和jquery中循环的退出和继续下一个循环_javascript技巧

作为水货,就是学会了1+1=3也要记录一下!错了,是2 学习记录: js中的 for(var i=1;i<5;i++){ if(i==3){ break; // 使用break,弹出2次提示分别为1,2:如果使用continue,则会弹出3次,分别是1,2,4 } alert(i); } 循环,退出循环,使用break:退出当前循环继续下一个循环,使用continue jquery中的each()方法中要实现break,使用return false:continue,使用return true