lyz97531 @ 2022-10-14 16:20:27
???50分
#include<bits/stdc++.h>
using namespace std;
int n;
long long x,ans;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
x=1;
for(int j=1;j<=i;j++)
{
x*=j;
}
ans+=x;
}
cout<<ans;
return 0;
}
by WZWZWZWY @ 2022-10-14 16:26:15
by _Virgo_ @ 2022-10-14 16:26:23
【其他说明】
注,《深入浅出基础篇》中使用本题作为例题,但是其数据范围只有
n \le 20 ,使用书中的代码无法通过本题。如果希望通过本题,请继续学习第八章高精度的知识。
by 155TuT @ 2022-10-14 16:27:35
非常经典!这道题你这么写只能50(
学下高精度,O(n!)的情况下按你代码好像n最多能到15左右的样子,数据范围到50(
by As_Nerve @ 2022-10-14 16:32:15
开高精,自己背板子(不会真的有人背高精板子吧)。
__int128
似乎可以用了QWQ
by int_stl @ 2022-10-26 16:54:08
import sys
a=int(input())
ans=0
fac=1
for i in range(1,a+1):
fac*=i
ans+=fac
print(ans)
#include <cstring>
#include <iostream>
using namespace std;
#define maxn 10000
struct Bigint
{
int len,a[maxn];
Bigint(int x=0)
{
memset(a,0,sizeof(a));
for(len=1; x; len++)
{
a[len]=x%10,x/=10;
}
len--;
}
int &operator[](int i)
{
return a[i];
}
void flatten(int L)
{
len=L;
for(int i=1; i<=len; i++)
{
a[i+1]+=a[i]/10,a[i]%=10;
}
for(; !a[len];)
{
len--;
}
}
void print()
{
for(int i=max(len,1); i>=1; i--)
{
cout<<a[i];
}
}
};
Bigint operator+(Bigint a,Bigint b)
{
Bigint c;
int len=max(a.len,b.len);
for(int i=1; i<=len; i++)
{
c[i]+=a[i]+b[i];
}
c.flatten(len+1);
return c;
}
Bigint operator*(Bigint a,int b)
{
Bigint c;
int len=a.len;
for(int i=1; i<=len; i++)
{
c[i]=a[i]*b;
}
c.flatten(len+11);
return c;
}
int main()
{
Bigint ans(0),fac(1);
int m;
cin>>m;
for(int i=1; i<=m; i++)
{
fac=fac*i;
ans=ans+fac;
}
ans.print();
}
python比C++的数据范围大多了
by lyz97531 @ 2023-07-16 14:35:05
@各位大佬 谢谢