当前位置:网站首页>学习了循环碰到了编写计算n的阶乘的题目,由此引发了一系列问题,包括一些初学者常见的坑,以及如何简化代码
学习了循环碰到了编写计算n的阶乘的题目,由此引发了一系列问题,包括一些初学者常见的坑,以及如何简化代码
2022-07-28 00:01:00 【壮壮】
1.计算n的阶乘
2.计算1!+2!+3!…+n!
1 计算n的阶乘
#include <stdio.h>
int main()
{
//输入
int n = 0;
scanf("%d", &n);
//产生1~n的数字
int i = 0;
int ret = 1;
for (i = 1; i <= n; i++)
{
ret = ret * i;
}
printf("%d\n", ret);
return 0;
}

这个很简单,一个循环就能解决的事情。还是看看思路,n的阶乘(这里拿3举例)3的阶乘就是123 ,咱给个循环,产生1到3的数,然后乘到自己定义的变量ret里(注意这里ret的初值只能设置为1,初值若是0,则任何数乘过去都是0了,懂吧)
2 计算1!+2!+3!…+n!
2.1 看看藏着坑的代码
#include <stdio.h>
int main()
{
//输入
int n = 0;
scanf("%d", &n);
int i = 0;
int ret = 1;
int sum = 0;
int j = 0;
for (j = 1; j <= n; j++)
{
for (i = 1; i <= j; i++)
{
ret = ret * i;
}
sum = sum + ret;
}
printf("%d\n", sum);
return 0;
}
看看结果
这里算出来1到3的阶乘之和为15,,但实际上应该是9.原因是啥呢?许多人是通过上面第一小问的结果,直接简单粗暴的在外头套一个循环把他们加起来。但是问题所在呢,就是 在内层循环进行一次的时候,在进入之时ret为初始化成1,导致在算3的阶乘的时候,ret初值为2,因此导致了错误
2.2 指出坑,并且给出正确的代码
#include <stdio.h>
int main()
{
//输入
int n = 0;
scanf("%d", &n);
int i = 0;
int ret = 1;
int sum = 0;
int j = 0;
for (j = 1; j <= n; j++)
{
ret = 1;//解决方法就是加了这一句话!!!
for (i = 1; i <= j; i++)
{
ret = ret * i;
}
sum = sum + ret;
}
printf("%d\n", sum);
return 0;
}

2.3 代码简化
先上简化代码哈
#include <stdio.h>
int main()
{
//输入
int n = 0;
scanf("%d", &n);
int ret = 1;
int sum = 0;
int j = 0;
for (j = 1; j <= n; j++)
{
ret = ret * j;
sum = sum + ret;
}
printf("%d\n", sum);
return 0;
}
仔细观察2.2的代码,会发现这两重循环中,重复计算了好多东西,因此在简化的代码中,可以进行调整。
这里举例辅助理解一下,在计算完1的阶乘之后,2的阶乘只需要在1的阶乘的基础上乘上2就行,以此类推,3的阶乘就是2的阶乘的结果乘上3.因此舍掉一个循环之后,代码效率大有提升
3小结
内容已经详尽的写在正文中了,如有问题或者建议,十分欢迎与我沟通。这里是壮壮的学习博客,感谢大家支持
边栏推荐
猜你喜欢
随机推荐
GBase 8c 备份控制函数(三)
【向 Dice Roller 应用添加图片】
What is the opening time of London Silver
Cap principle of [distributed development]
华为“天才少年”稚晖君又出新作,从零开始造“客制化”智能键盘
Oracle RAC cluster file directory migration
Linux系统彻底删除Mysql
IIC read / write eefprom
For newly installed PIP3, use no module named 'LSB_ Release 'problem
2.2 comprehensive application questions - sequence table
String
数商云供应链集采管理系统解决方案:集采系统管理模式,数字化管控企业物资
股票问题5连
HCIP第十五天
【taichi】在太极中画出规整的网格
[style set 1] tab
My rich second generation friend
登录功能实现
LeetCode第 83 场双周赛
Zhi Huijun, Huawei's "genius youth", has made a new work, building a "customized" smart keyboard from scratch







