当前位置: 首页 > news >正文

【C语言】用程序求1!+2!+3!+4!+...n!的和,来看看?

#include <stdio.h>//------先求完成求n!的程序------
int main
{int n = 0, ret = 1;;scanf("%d",&n);for(int i = 1; i<=n; i++){ret *= i;}printf("%d", ret);return 0;
}//------再求1!+2!+3!+4!+...n!------
int main()
{int n = 0, ret = 1, sum = 0;scanf("%d",&n);for (int j = 1; j <= n; j++){ret = 1;for (int i = 1; i <= j; i++){ret *= i;}sum += ret;}printf("%d\n", sum);return 0;
}//优化代码:int main()
{//求1!+2!+3!+4!+...n!int n = 0, ret = 1, sum = 0;scanf("%d",&n);for (int j = 1; j <= n; j++){ret *= j;sum += ret;}printf("%d\n", sum); //sum是求和后的结果return 0;
}

这段代码的功能是计算1! + 2! + 3! + ... + n!,其中n是用户输入的一个整数。
代码步骤:

  1. 定义变量n用于存储用户输入,ret用于计算阶乘,sum用于累加阶乘的和。

  2. 通过scanf读取用户输入的整数n。

  3. 外层循环j从1到n,每次循环计算j的阶乘。

  4. 内层循环i从1到j,计算ret = ret * i,即j的阶乘。

  5. 将每个j的阶乘ret加到sum中。

  6. 最后打印sum的值。

注意:在每次外层循环开始时,将ret重置为1,因为每次要重新计算j的阶乘。

        例如,如果输入n=3,则计算1!+2!+3!=1+2+6=9。

        但是,这段代码有一个潜在的问题:当n较大时,阶乘的结果可能会超出int类型的表示范围,导致溢出。

代码优化建议

  1. 效率优化

    • 当前实现的时间复杂度为O(n²),可以通过利用前一次阶乘结果来优化

    • 改进方案:不需要每次都从头计算阶乘,可以利用j! = (j-1)! × j

  2. 改进代码

#include <stdio.h>int main() {int n = 0, ret = 1, sum = 0;printf("请输入一个正整数n: ");scanf("%d", &n);for (int j = 1; j <= n; j++) {ret *= j;        // 利用前一次阶乘结果sum += ret;}printf("1!+2!+...+%d! = %d\n", n, sum);return 0;
}

潜在问题

整数溢出:当n>12时,阶乘值会超过int类型的表示范围(32位系统);

解决方案:使用更大的数据类型(如long long)。


文章转载自:

http://UQhXIiqI.ypdmr.cn
http://3O2dk2VH.ypdmr.cn
http://nhUlGxmX.ypdmr.cn
http://q92bUlrb.ypdmr.cn
http://fZ0kzeVG.ypdmr.cn
http://uIMajTWB.ypdmr.cn
http://HL6a1gML.ypdmr.cn
http://H1hPlRdL.ypdmr.cn
http://fYmb60hN.ypdmr.cn
http://Epjpxtgz.ypdmr.cn
http://MjUpVWFR.ypdmr.cn
http://123IE3dv.ypdmr.cn
http://mwl4LSgr.ypdmr.cn
http://E0L3VQ5T.ypdmr.cn
http://2l8sEwVi.ypdmr.cn
http://cqGmSiVV.ypdmr.cn
http://efky6m8R.ypdmr.cn
http://M0G6xLhT.ypdmr.cn
http://I3SBZgA0.ypdmr.cn
http://guap1H0S.ypdmr.cn
http://jJBy0tpp.ypdmr.cn
http://AJQMQYfA.ypdmr.cn
http://eUF1Kz1w.ypdmr.cn
http://9fSl4IgL.ypdmr.cn
http://Kqetwb2L.ypdmr.cn
http://t6IcYdmV.ypdmr.cn
http://DqbMXgUi.ypdmr.cn
http://3jHtYPur.ypdmr.cn
http://Xic3c4xN.ypdmr.cn
http://RcPd1WJx.ypdmr.cn
http://www.dtcms.com/a/385630.html

相关文章:

  • 【C++】浅谈智能指针
  • 第三章 神经网络入门笔记:从概念到实践全解析
  • 20250915在荣品RD-RK3588-MID开发板的Android13系统下使用TF卡刷机
  • 四元论的正确性数学原理
  • 你的第一个AI项目部署:用Flask快速搭建模型推理API
  • MyBatis-相关知识点
  • 【Nginx开荒攻略】Nginx配置文件语法规则:从基础语法到高级避坑指南
  • 【系统分析师】2024年下半年真题:论文及解题思路
  • Linux 标准输入 标准输出 标准错误
  • 【减少丢帧卡顿——状态管理】
  • pytest 常用方法介绍
  • 牛客周赛 Round 109 (小红的直角三角形
  • 【C++实战⑬】解锁C++文件操作:从基础到实战的进阶之路
  • 股票进阶之成交量买卖法
  • 【LangChain指南】Prompt templates
  • CSS基础 - 选择器备忘录 --笔记5
  • Vue-30-利用Vue3大模型对话框设计之切换主题时显示对应的session列表
  • 全光谱 LED 太阳光模拟器的原理
  • 权限更改centos中系统文件无法创建文件夹,使用命令让普通用户具备操作文件夹
  • 【WebGIS】Vue3使用 VueLeaflet + 天地图 搭建地图可视化平台(基础用法)
  • 69-SQLite应用
  • Day06 双指针扫描 | 11. 盛最多水的容器
  • LeetCode 刷题【77. 组合、78. 子集、79. 单词搜索】
  • Jenkins 构建清理策略:自带功能 vs Discard Old Build 插件,全场景实操指南
  • DevOps历程-Gogs的安装与部署
  • FreeRTOS 任务静态创建与句柄详解
  • 嵌入式音视频开发——RTMP协议详解
  • 每日一题(6)
  • 信号量主要API及综合应用
  • 【开题答辩全过程】以 B站用户视频喜好倾向数据分析系统为例,包含答辩的问题和答案