荒泷一斗 @ 2022-08-27 13:36:34
我的思路
制作函数,算阶乘,然后for循环导入函数,变量储值,输出。
好了,大佬想听的话我也说完了
呈上代码:
#include<bits/stdc++.h>
using namespace std;
int jiecheng(int zx)//函数计算阶乘
{
int k=1;
for(int i=1;i<=zx;i++)
{
k*=i;
}
return k;//返回阶乘的值
k=1;//完成后赋值
}
int main()//主程序
{
int n,jc=0;
cin>>n;
for(int i=1;i<=n;i++)//1到n的阶乘
{
jc+=jiecheng(i);//储值
}
cout<<jc;
}
大佬求助
by CarDriveer @ 2022-08-27 13:38:36
@arageg_bzn_0228 阶乘很大,要用高精度
by fengziyi @ 2022-08-27 13:49:03
@arageg_bzn_0228 请学习高精度算法
by lzy20040530 @ 2022-09-15 12:36:41
使用高精度,因为它可能会溢出
#include<iostream>
#include<vector>
using namespace std;
vector<int> add(vector<int>&v1,vector<int>&v2)
{
vector<int>res;
int t=0;
int i=0;
while(i<v1.size() || i<v2.size() || t)
{
if(i<v1.size())
{
t+=v1[i];
}
if(i<v2.size())
{
t+=v2[i];
}
res.push_back(t%10);
t/=10;
i++;
}
return res;
}
vector<int> mul(vector<int>&A,int B)
{
vector<int>res;
for(int i=0,t=0;i< A.size() || t;i++)
{
if(i<A.size())
{
t+=A[i]*B;
}
res.push_back(t%10);
t/=10;
}
while(res.size()>1 && res.back() == 0)
{
res.pop_back();
}
return res;
}
int main()
{
vector<int>v1{0},v2{1};
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
v2=mul(v2,i);
v1=add(v1,v2);
}
for(int i=v1.size()-1;i>=0;i--)
{
cout<<v1[i];
}
return 0;
}