题目
输入n, 求y1=1!+3!+...m!(m是小于等于n的最大奇数) y2=2!+4!+...p!(p是小于等于n的最大偶数)。
解题思路
打表算最快,不用每个数据都算一次。
复杂度
时间复杂度(输入的数据量O(m))
空间复杂度O(1)
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
//实际上算到30的阶乘肯定溢出了
//但是没关系,题目给的肯定不是溢出的数据
ll jc[30]; //jc[i]表示i的阶乘
ll ans[30]; // ans[i]表示奇、偶数项阶乘和
int main(){
//算1~30的阶乘
jc[0] = 1;
for(int i = 1;i < 30; ++i){
jc[i] = jc[i-1]*i;
}
//算奇、偶数项阶乘和
ans[1] = 1;
for(int i = 2;i < 30; ++i){
ans[i] = ans[i-2] + jc[i];
}
//每个n直接判断奇偶输出即可
//不用每个数据再算一次阶乘
ll n;
while(cin >> n){
if(n%2){
cout << ans[n] << " " << ans[n-1] << endl;
}else{
cout << ans[n-1] << " " << ans[n] << endl;
}
}
return 0;
}
原文地址:https://www.cnblogs.com/zhangjiuding/p/10421403.html
时间: 2024-10-09 17:51:08