计算机考研复试真题 阶乘
题目描述
输入n, 求y1=1!+3!+...m!(m是小于等于n的最大奇数) y2=2!+4!+...p!(p是小于等于n的最大偶数)。
输入描述:
每组输入包括1个整数:n
输出描述:
可能有多组测试数据,对于每组数据, 输出题目要求的y1和y2
示例1
输入
4
输出
7 26
/* 解题思路:1.写一个求某一数字m的阶乘函数。 2.对于输入的n进行最大奇数和偶数的确定,确定方法:若n%2==0,则最大偶数为n,最大奇数为n-1; 若n%2!=0,则最大奇数为n,最大偶数为n-1; 3.然后根据题意+2阶乘累加。 */ #include<iostream> using namespace std; int factorial(int m) { // if (m == 1) return 1; return m * factorial(m - 1); } int main() { int n; //输入的整数 int maxEven, maxOdd; //存放最大偶数和奇数 int sum1 = 0, sum2 = 0; //存放阶乘和 while (cin >> n) { if (n % 2 == 0) { maxEven = n; maxOdd = n - 1; for (int i = 2; i <= maxEven; i = i + 2) { sum1 += factorial(i); } for (int i = 1; i <= maxOdd; i = i + 2) { sum2 += factorial(i); } cout << sum2 << " " << sum1 << endl; } else { maxEven = n - 1; maxOdd = n; for (int i = 2; i <= maxEven; i = i + 2) { sum1 += factorial(i); } for (int i = 1; i <= maxOdd;i = i + 2) { sum2 += factorial(i); } cout << sum2 << " " << sum1 << endl; } } return 0; }