输入n, 求y1=1!+3!+...m!(m是小于等于n的最大奇数) y2=2!+4!+...p!(p是小于等于n的最大偶数)。c++
打表算最快,不用每一个数据都算一次。spa
时间复杂度(输入的数据量O(m))
空间复杂度O(1)code
#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; }