题解 | #阶乘#
阶乘
https://www.nowcoder.com/practice/e58c8a55162d49c48115bdfa5da7da56
#include "iostream"
using namespace std;
// qusetion:输入n, 求y1=1!+3!+...m!(m是小于等于n的最大奇数) y2=2!+4!+...p!(p是小于等于n的最大偶数)。
// analyse:
// input:4
// y1 = 1!+3! = 1 + 6 = 7
// y2 = 2!+4! = 2 + 24 =26
// maybe input is so large, therefore use string to storage the big int;
string add(string a,string b){ // 字符串加法
int carry=0;
string res;
long long unsigned int i=0;
for(;i<a.size()&&i<b.size();i++){
int temp = (a[a.size()-i-1]-'0')+(b[b.size()-i-1]-'0')+carry;
carry = temp/10;
temp = temp%10;
char charTemp = temp+'0';
res = charTemp + res;
}
while(i<a.size()){
int temp = (a[a.size()-i-1]-'0')+carry;
carry = temp/10;
temp = temp%10;
char charTemp = temp+'0';
res = charTemp + res;
i++;
}
while(i<b.size()){
int temp = (b[b.size()-i-1]-'0')+carry;
carry = temp/10;
temp = temp%10;
char charTemp = temp+'0';
res = charTemp + res;
i++;
}
if(carry!=0){
char charTemp = carry+'0';
res = charTemp + res;
}
return res;
}
string mulBasic(string a,int b){
int carry=0,power=1;
long long unsigned int i=0;
string res;
for(;i<a.size();i++){
int temp = (a[a.size()-i-1]-'0')*b+carry;
carry = temp/10;
temp = temp%10;
char charTemp = temp+'0';
res = charTemp+res;
}
if(carry!=0){
char charTemp = carry+'0';
res = charTemp + res;
}
return res;
}
string mul(string a,string b){
string res="0";
for(long long unsigned i=0;i<b.size();i++){
string y = mulBasic(a,b[b.size()-i-1]-'0');
for(int j=0;j<i;j++) y = y+'0';
// cout<< y<<endl;
res = add(res,y);
}
return res;
}
string intToStr(long long int input){ // 将int转为string进行字符串加法乘法
string res = "";
while(input){
char temp = input%10+'0';
res = temp +res;
input = input/10;
}
return res;
}
string JieCheng(long long int input){ // 函数:阶乘计算
string res = "1";
for(long long int i=2;i<=input;i++){
res = mul(res,intToStr(i));
}
return res;
}
int main(){
long long int input;
while(cin>>input){
string resJi="0",resOu="0";
for(long long int i=1;i<=input;i++){
if(i%2==0) resOu=add(resOu,JieCheng(i)); // 奇数阶乘相加
else resJi=add(resJi,JieCheng(i)); // 偶数阶乘相加
}
cout<<resJi<<" "<<resOu<<endl;
}
return 0;
}
海康威视公司氛围 920人发布
查看5道真题和解析