EricOO7 @ 2023-12-09 14:52:58
#include<bits/stdc++.h>
using namespace std;
long long jc(int n)
{
int s = 1,i;
for(i=1;i<=n;i++){
s *= i;
}
return s;
}
int main(){
long long n,i,s = 0;
cin>>n;
for(i=1;i<=n;i++){
s = jc(i) + s;
}
cout<<s;
return 0;
}
by EricOO7 @ 2023-12-09 15:16:18
@LYBT 明白了
by EricOO7 @ 2023-12-09 15:20:26
@xiaoshumiao 代码:
#include<bits/stdc++.h>
using namespace std;
long long jc(n){
int x;
while(n>0){
if(n-1==1){
jc(n-1) = n-1;
}
x = n*jc(n-1);
}
cout<<x;
return 0;
}
int main(){
long long n,i,s = 0;
cin>>n;
for(i=1;i<=n;i++){
s += jc(i);
}
cout<<s;
return 0;
}
by LYBT @ 2023-12-09 15:22:05
我有个写好的高精度结构体,你可以用用
struct HP_int:vector<int>{//HP_int == hign precision int(高精度)
HP_int(int n=0){
push_back(n);
check();
}
HP_int& check(){
while(!empty()&&!back())pop_back();
if(empty())return *this;
for(int i=1;i<size();i++){
(*this)[i]+=(*this)[i-1]/10;
(*this)[i-1]%=10;
}
while(back()>=10){
push_back(back()/10);
(*this)[size()-2]%=10;
}
return *this;
}
};
istream& operator>>(istream &is,HP_int &n){
string s;
is>>s;
n.clear();
for(int i=s.size()-1;i>=0;i--)n.push_back(s[i]-'0');
return is;
}
ostream& operator<<(ostream &os,const HP_int &n){
if(n.empty())os<<0;
for(int i=n.size()-1;i>=0;i--)os<<n[i];
return os;
}
HP_int operator*(const HP_int &a,const HP_int &b){
HP_int n;
n.assign(a.size()+b.size()-1,0);
for(int i=0;i!=a.size();i++){
for(int j=0;j!=b.size();j++){
n[i+j]+=a[i]*b[j];
}
}
return n.check();
}
HP_int operator+(const HP_int &a,const HP_int &b){
HP_int n;
int jw=0;
n.assign(max(a.size(),b.size())+1,0);
for(int i=0;i!=max(a.size(),b.size());i++){
if(i<b.size()&&i<a.size()){
n[i]+=a[i]+b[i]+jw;
jw=n[i]/10;
n[i]%=10;
}
else if(i<a.size()){
n[i]+=a[i]+jw;
jw=n[i]/10;
n[i]%=10;
}
else{
n[i]+=b[i]+jw;
jw=n[i]/10;
n[i]%=10;
}
}
if(jw!=0) n[a.size()]=jw;
return n.check();
}
bool operator<(const HP_int &a,const HP_int &b){
if(a.size()!=b.size())return a.size()<b.size();
for(int i=a.size()-1;i>=0;i--){
if(a[i]!=b[i]) return a[i]<b[i];
}
return 0;
}
bool operator>(const HP_int &a,const HP_int &b){
if(a.size()!=b.size())return a.size()>b.size();
for(int i=a.size()-1;i>=0;i--){
if(a[i]!=b[i]) return a[i]>b[i];
}
return 0;
}
bool operator==(const HP_int &a,const HP_int &b){
if(a.size()!=b.size()) return 0;
for(int i=a.size()-1;i>=0;i--){
if(a[i]!=b[i]) return 0;
}
return 1;
}
由于本人比较垃圾,没完全写好,请注意使用时,i++要写成i=i+1,不要写<=,且int和HP_int不能转换,可以直接赋值
by LYBT @ 2023-12-09 15:24:06
竞赛里很少用高精度了,在以后编码时遇到高精度,可以抄模版
by EricOO7 @ 2023-12-09 15:31:08
@LYBT 这不是zhan吗?
by LYBT @ 2023-12-09 15:32:13
里面用的是vector,动态数组
by LYBT @ 2023-12-09 15:34:41
@EricOO7 你不用考虑别的,你只要把需要的东西全定义成HP_int型就行啦,然后注意我前面的提醒
by EricOO7 @ 2023-12-09 15:41:30
@LYBT 代码:
#include<bits/stdc++.h>
using namespace std;
long long jc(n){
HP_int x;
while(n>0){
if(n-1==1){
jc(n-1) = 1;
}
x = n*jc(n-1);
}
cout<<x;
return 0;
}
int main(){
HP_int n,i,s = 0;
cin>>n;
for(i=1;i<=n;i++){
s += jc(i);
}
cout<<s;
return 0;
}
by LYBT @ 2023-12-09 17:03:26
@EricOO7 所以把我那个类型声明写上去啊,这样回编译失败的