解题思路:
为了看起来更清晰,我先写了一个阶乘的函数,然后在主函数内将每个阶乘累加起来。
注意事项:
(1)注意溢出,当阶乘的基数很大时,int表示的范围就不够用了。
(2)递归时,分清楚 n - 1 和 n-- 的区别。详情见代码。
(3)原本阶乘函数写的是非递归,需要定义一个res,注意res的初始值要赋为1而不是0。
(4)异常处理时,注意0的阶乘是1。
参考代码:
#include <iostream> using namespace std; long long factorial(int num); int main() { int n = 0; //输入 long long int sn = 0; //输出 cin >> n; if(n < 1 || n > 20) { return -1; //异常处理 } while(n) { sn += factorial(n--); } cout << sn << endl; return 0; } long long factorial(int num) { if(num == 1) { return 1; } else { return num * factorial(num - 1); //递归,注意这里不是num-- } }
0.0分
2 人评分
C语言程序设计教程(第三版)课后习题11.11 (C语言代码)浏览:804 |
【明明的随机数】 (C++代码)浏览:834 |
求圆的面积 (C语言代码)浏览:1366 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:909 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:400 |
字符串的输入输出处理 (C语言代码)浏览:1020 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:552 |
2004年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:1368 |
用筛法求之N内的素数。 (C语言代码)浏览:890 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:934 |