本文分享的必刷题目是从蓝桥云课、洛谷、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(1≤T≤10)表示测试数据的组数。接下来T TT行每行包含一个整数n ( 0 ≤ n ≤ 10 ) n (0≤n≤10)n(0≤n≤10)。【输出】输出共T TT行每行一个整数表示对应n nn的阶乘n ! n!n!。【输入样例】3 5 0 10【输出样例】120 1 3628800【核心思想】问题分析给定T TT组测试数据每组给定一个非负整数n nn0 ≤ n ≤ 10 0 \leq n \leq 100≤n≤10要求计算n ! 1 × 2 × ⋯ × n n! 1 \times 2 \times \dots \times nn!1×2×⋯×n特别地0 ! 1 0! 10!1。这是一个直接模拟乘法过程的问题关键在于正确实现阶乘的累乘逻辑并处理边界情况n 0 n0n0和n 1 n1n1。算法选择直接模拟Brute-force Simulation从2 22到n nn依次累乘利用乘法的结合律直接计算结果边界处理0 ! 1 0! 10!1和1 ! 1 1! 11!1通过循环条件i x自然覆盖循环不执行时返回初始值1 11关键步骤初始化读取T TT测试组数定义函数factorial(x)函数内部初始化结果变量res 1乘法单位元确保0 ! 0!0!和1 ! 1!1!正确返回1 11遍历i ii从2 22到x xxres res \times i返回res主程序循环读入n nn调用factorial(n)并输出结果重复T TT次时间/空间复杂度时间复杂度O ( T ⋅ n ) O(T \cdot n)O(T⋅n)每组数据最多进行n nn次乘法n ≤ 10 n \leq 10n≤10空间复杂度O ( 1 ) O(1)O(1)仅使用常数个变量存储结果模拟算法的核心思想按定义直接实现阶乘的数学定义本身就是累乘过程直接翻译为代码即可乘法单位元的妙用初始化res 1同时满足0 ! 1 0! 10!1和作为累乘起点循环起点的优化从i 2 i2i2开始1 11乘以任何数不变减少一次无意义运算数据类型预防使用long long防止更大范围阶乘溢出体现工程习惯适用于计算过程明确、无复杂递推关系、数据范围极小的场景【算法标签】#模拟【代码详解】#includebits/stdc.husingnamespacestd;#defineintlonglong// 将int定义为long long避免阶乘结果溢出10! 3628800虽然int能存但养成好习惯intt,n;// t为测试数据组数n为每组数据要计算阶乘的整数// factorial函数计算非负整数x的阶乘// 注意原代码存在bug循环变量应使用参数x而非全局变量nintfactorial(intx){intres1;// res存储阶乘结果初始化为10! 1乘法单位元for(inti2;ix;i)// 从2乘到x若x为0或1循环不执行直接返回1res*i;// 累乘res res * ireturnres;// 返回x的阶乘结果}signedmain()// 使用signed main配合#define int long long{cint;// 读入测试数据组数Twhile(t--)// 依次处理每组测试数据{cinn;// 读入非负整数ncoutfactorial(n)endl;// 调用factorial函数计算n!并输出}return0;}【运行结果】3 5 120 0 1 10 3628800