问个循环的问题哦~~
c语言吧
全部回复
仅看楼主
level 2
//求1!+2!+3!.....+n!的值#include
void main(){ int sum1=1,sum2=0,i,k,n; scanf("%d",&n); for(i=1;i<=n;i++){ sum1=1;/*原来没有这句的,运行就是不对*/ for(k=1;k<=i;k++){ sum1*=k; } sum2+=sum1; } printf("%d\n",sum2);}开始的定义的时候不是已经sum1=1了吗,为什么在循环里还要在说一次?
2007年02月05日 11点02分 1
level 0
内层循环中sum1*=k;在循环内改变sum1的值,当循环完毕后sum1的值会保留。第二次循环时,上次sum1的值会参加这次新的阶乘。所以结果会错。sum1=1加上后相当于初始化了一次sum1,把上次的结果清除掉了,并置为1所以就正确了。改进的方法也是有的:#include
void main() { int sum1=1,sum2=0,i,k=1,n; scanf("%d",&n); for(i=1;i<=n;i++) { for(;k<=i;k++) { sum1*=k; } sum2+=sum1; } printf("%d\n",sum2); } 这样可以节省cpu时间,也不需要反复初始化sum1为1了。
2007年02月05日 11点02分 2
level 0
这样说来,实际上你的内部循环是沉余的,只需要一层循环就可以实现,仍然改自你的代码:#include
void main() { int sum1=1,sum2=0,i,k=1,n; scanf("%d",&n); for(i=1;i<=n;i++) { sum1*=i; sum2+=sum1; } printf("%d\n",sum2); }
2007年02月05日 11点02分 3
level 2
我就想试试嵌套的循环....
2007年02月05日 11点02分 4
level 0
那就好好看看回复的2楼吧。不知说的得可明白?
2007年02月05日 11点02分 5
level 2
知道了解明白清楚~谢谢~
2007年02月05日 11点02分 6
1