当前位置:网站首页>学习了循环碰到了编写计算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小结
内容已经详尽的写在正文中了,如有问题或者建议,十分欢迎与我沟通。这里是壮壮的学习博客,感谢大家支持
边栏推荐
- Introduction to QT drawing system
- N32L43x Flash读\写\擦除操作总结
- 小散量化炒股记|量化系统中数据是源头,教你搭建一款普适的数据源框架
- Brushes and brushes
- Zhi Huijun, Huawei's "genius youth", has made a new work, building a "customized" smart keyboard from scratch
- 喜欢听的歌曲
- Oracle RAC cluster file directory migration
- ue4 unreal NDisplay插件 简易使用 三折幕 详细...
- 物企大变局时代,SRM供应商采购系统助力企业打造物业采购数字化标杆
- HCIP第十三天笔记
猜你喜欢

石油化工行业迎战涨价大潮,经销商分销系统平台数字化赋能经销商与门店

likeshop外卖点餐系统【100%开源无加密】

华为“天才少年”稚晖君又出新作,从零开始造“客制化”智能键盘

Storage practices for high-performance computing scenarios, see here

leetcode: 515. 在每个树行中找最大值

【向 Dice Roller 应用添加图片】

以“数字化渠道”撬动家用电器消费蓝海,经销商在线系统让企业生意更进一步

总结:Prometheus存储

HRD 1. a simple and reliable HRD detection method

Matlab 44 animation gradient drawing programs
随机推荐
GBase 8c 事务ID和快照(五)
Qlib教程——基于源码(二)本地数据保存与加载
A comprehensive case of crawler learning -- visiting websites
Blizzard Diablo 4 ps5 / PS4 beta added to Playstation database
嵌入式经典通信协议
Brushes and brushes
Recursion related exercises
面试题 01.09. 字符串轮转
GBase 8c 通用文件访问函数
For newly installed PIP3, use no module named 'LSB_ Release 'problem
总结:Prometheus存储
阿虎的故事
26.抽象化和模板思想
周报、月报有多折磨人?万能报表模板建议收藏!(附模板)
Load balancing SLB
Storage practices for high-performance computing scenarios, see here
普通设备能不能接入TSN时间敏感网络?
If you are still using WiFi, you will be out: li-fi is better!!!
GBase 8c 事务ID和快照(六)
VLAN experiment