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

题解:瑞学堂 徐老师的阶乘计算器

本文分享的必刷题目是从蓝桥云课洛谷AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。

欢迎大家订阅我的专栏:算法题解:C++与Python实现!

附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总


【题目来源】

瑞学堂:徐老师的阶乘计算器

【题目描述】

徐老师发现很多数学问题都需要重复计算阶乘。为了简化代码和提高效率,他决定编写一个函数factorial(n)来计算一个非负整数n nn的阶乘。

阶乘的定义是:n ! = 1 × 2 × 3 × . . . × n n!=1×2×3×...×nn!=1×2×3×...×n,特别地,0 ! = 1 0!=10!=1

现在,请你帮助徐老师完成这个任务。你需要编写一个程序,该程序包含一个名为factorial的函数,用于计算阶乘。主程序将读取一个整数T TT,表示有T TT组测试数据。对于每组数据,读取一个整数n nn,然后调用factorial函数计算n ! n!n!并输出结果。

【输入】

第一行包含一个整数T ( 1 ≤ T ≤ 10 ) T (1≤T≤10)T(1T10),表示测试数据的组数。
接下来T TT行,每行包含一个整数n ( 0 ≤ n ≤ 10 ) n (0≤n≤10)n(0n10)

【输出】

输出共T TT行,每行一个整数,表示对应n nn的阶乘n ! n!n!

【输入样例】

3 5 0 10

【输出样例】

120 1 3628800

【核心思想】

  1. 问题分析:给定T TT组测试数据,每组给定一个非负整数n nn0 ≤ n ≤ 10 0 \leq n \leq 100n10),要求计算n ! = 1 × 2 × ⋯ × n n! = 1 \times 2 \times \dots \times nn!=1×2××n(特别地,0 ! = 1 0! = 10!=1)。这是一个直接模拟乘法过程的问题,关键在于正确实现阶乘的累乘逻辑并处理边界情况n = 0 n=0n=0n = 1 n=1n=1

  2. 算法选择

    • 直接模拟(Brute-force Simulation):从2 22n nn依次累乘,利用乘法的结合律直接计算结果
    • 边界处理0 ! = 1 0! = 10!=11 ! = 1 1! = 11!=1通过循环条件i <= x自然覆盖(循环不执行时返回初始值1 11
  3. 关键步骤

    • 初始化:读取T TT(测试组数),定义函数factorial(x)
    • 函数内部
      • 初始化结果变量res = 1(乘法单位元,确保0 ! 0!0!1 ! 1!1!正确返回1 11
      • 遍历i ii2 22x xxres = res \times i
      • 返回res
    • 主程序循环
      • 读入n nn
      • 调用factorial(n)并输出结果
    • 重复T TT
  4. 时间/空间复杂度

    • 时间复杂度:O ( T ⋅ n ) O(T \cdot n)O(Tn),每组数据最多进行n nn次乘法(n ≤ 10 n \leq 10n10
    • 空间复杂度:O ( 1 ) O(1)O(1),仅使用常数个变量存储结果
  5. 模拟算法的核心思想

    • 按定义直接实现:阶乘的数学定义本身就是累乘过程,直接翻译为代码即可
    • 乘法单位元的妙用:初始化res = 1同时满足0 ! = 1 0! = 10!=1和作为累乘起点
    • 循环起点的优化:从i = 2 i=2i=2开始(1 11乘以任何数不变),减少一次无意义运算
    • 数据类型预防:使用long long防止更大范围阶乘溢出,体现工程习惯
    • 适用于计算过程明确、无复杂递推关系、数据范围极小的场景

【算法标签】

#模拟

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong// 将int定义为long long,避免阶乘结果溢出(10! = 3628800,虽然int能存,但养成好习惯)intt,n;// t为测试数据组数,n为每组数据要计算阶乘的整数// factorial函数:计算非负整数x的阶乘// 注意:原代码存在bug,循环变量应使用参数x而非全局变量nintfactorial(intx){intres=1;// res存储阶乘结果,初始化为1(0! = 1,乘法单位元)for(inti=2;i<=x;i++)// 从2乘到x(若x为0或1,循环不执行,直接返回1)res*=i;// 累乘:res = res * ireturnres;// 返回x的阶乘结果}signedmain()// 使用signed main配合#define int long long{cin>>t;// 读入测试数据组数Twhile(t--)// 依次处理每组测试数据{cin>>n;// 读入非负整数ncout<<factorial(n)<<endl;// 调用factorial函数计算n!并输出}return0;}

【运行结果】

3 5 120 0 1 10 3628800
http://www.jsqmd.com/news/1392225/

相关文章:

  • 揭秘江阳建设集团网站背后的匠心独运与未来愿景
  • Cat-Catch 浏览器扩展全攻略:一个下午搞定网页媒体资源捕获与 M3U8 合并
  • 星空芯片获头部新能源车企定点,地平线与博泰车联合作迈入量产落地新阶段
  • DeepSeek flash/pro如何接入CodeX
  • 15万买50万级智驾?2026年,城市NOA如何成为买车“必选项”
  • 智谱清言排版word的终极痛点,被“AI 导出鸭”用一套底层逻辑彻底终结
  • 西宁专业企业网站建设深度解析:如何让本土品牌在数字时代突围重生
  • Demucs人声分离部署实战:从装到批量交付,8个避坑点一次讲透
  • 商城网站建设流程图:从0到1的完整揭秘,手把手教你避坑指南,新手必看的实战经验
  • ZOBO卓邦舞台音响设备本地服务常见问题解答(2026版) - 全域品牌推荐
  • 微泄漏密封试验仪口碑好选购指南:无损检测技术哪家更成熟? - 品牌推荐大师1
  • OpenCore EFI配置,如何从一整天缩到半小时?
  • 【博主精读版】计算机岗国考行测小模考0812|一道血型题,扒开了“细节判断“的遮羞布
  • 激光雷达扫描频率
  • 零基础用Pixelle-Video实现AI全自动短视频创作:从一句话主题到成品视频的完整实战指南
  • 揭秘甘肃省城乡建设厅网站背后的政策脉络与办事指南,助您轻松搞定房产与工程事宜
  • 声网母公司披露2026 Q2财报:连续7个季度GAAP盈利
  • 用于音频分类的梅尔频谱图图像数据集
  • 2026 年 8 月儋州房屋漏水科普:台风暴雨叠加回潮,房屋渗水维修怎么选 - 筑宅安
  • palera1n越狱工具从零到一全攻略:让A8至A11老设备重获新生的终极指南
  • MyBatis-Plus 的条件查询
  • 2026年沈阳GEO优化公司推荐:两家靠谱公司深度测评 - 优企甄选
  • Agent 为什么总是“失忆”?一套生产级长期记忆系统,远不止向量数据库
  • 英伟达笔试1
  • 开火锅店最重要的一点是什么?
  • ahk2_lib 实战指南:3 步把 AutoHotkey V2 脚本升级成专业桌面工具
  • 2026最新 PanDownload 网页解析版:免安装客户端,百度网盘直链提取不限速
  • 艾灸按摩职业培训选哪所学校?湖北李时珍国医培训学校保健艾灸专业报名指南 - 武汉中职最新信息发布
  • 海水能送一千五百公里,北极能让信号整天消失
  • 跨平台 Git 可视化工具 SourceGit 实操指南:从个人装机到团队协作全流程