您的位置:首页 > 编程语言 > C语言/C++

阶乘的几种表示方法及其拓展

2017-12-04 19:39 204 查看
(a)读入一个非负整数,计算并打印阶乘。错解:#include int main(){int x,i;  //输入一个整数,计数//scanf("%d",&x);for(i=1;i<=x;i++)x*=(x-1);printf("%d",x);return 0;}自以为天衣无缝,实则白痴一个比如我。1. 第一次执行完以后:x=5*(5-1)=20 i=2 没错,但是x变成20了啊啊啊啊!!!你编程序的时候进入第二次循环时脑子里还天真的以为x还是那个 x-1 后的4。2. 随着运算的进行,for语句你的x也会跟着变化啊!!!无止境了啊啊啊啊!!!(这个错误我栽了两次。)
所以,这个“x-1”递减得另用一个变量来实现,这样递减的因数就与我们想得到的结果x互不干扰了。正解:1.自己的想法。#includeint main(){int x,i,y,n;  //输入一个整数, 计数,递减的因数,限定循环次数//scanf("%d",&x);n=x;y=x;for(i=1;i<=n-1;i++,y--)//由于x一上来就是输入值,所以省了一次:n-1//x*=(y-1);//也可另设置一个积answer=1;这样for语句里就是 i<=x; //printf("%d",x);return 0;}//while循环也可//
2.网友的想法。(感觉思路更好)#includeint main(){int n,fact=1,i; //输入一个整数,结果,循环计数//scanf("%d",&n);for(i=1;i<=n;i++)fact*=i;printf("fact=%d\n",fact);return 0;}它不是向定式思维一样因数递减然后乘以结果,他是用我们输入的数限定循环次数,从1开始递增累乘到我们输入的数,妙哉!
(b)求阶乘之和。#includeint main(){int i,j,n;long term, sum = 0;printf("Input n:");scanf("%d",&n);for(i=1;i<=n;i++){term=1;for(j=1; j<=i; j++)term*=j;sum+=term;}printf("1!+2!+...+%d!=\n",n,sum);return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言