AIMEE11 @ 2022-08-04 19:01:48
#include<iostream>
using namespace std;
int main()
{
unsigned long long n,sum=0,a=1;
cin>>n;
for(int i=1;i<=n;i++)
{
a*=i;
sum+=a;
}
cout<<sum;
}
by _cyle_King @ 2022-08-04 19:07:12
@AIMEE11 bdfs,这种问题一般不会有人主动去帮你的。
by Haber @ 2022-08-04 19:07:49
题解是什么东西啊
by Jastin @ 2022-08-04 19:08:40
int a,b=int(input()),int(input())
print(a+b)
by 111222333aaa @ 2022-08-04 19:09:12
@AIMEE11 真·高精度
by AIMEE11 @ 2022-08-04 19:10:36
@_cyle_King 才注册几天,不晓得
by _cyle_King @ 2022-08-04 19:11:45
@Jastin (我是个菜鸡,说错了勿喷)您的 python
确定没有问题吗?
by AIMEE11 @ 2022-08-04 19:12:49
@111222333aaa 我也没办法啊啊啊,怎么写啊
要不然我也不会开 unsigned long long 啊啊啊啊
by AIMEE11 @ 2022-08-04 19:15:21
算了,50分也不是不可以(bushi)
by _cyle_King @ 2022-08-04 19:16:45
@AIMEE11 您自学一下高精度吧,我试过,这题用 __128 过不去。
by fiveyes @ 2022-08-04 19:18:10
可以参考《深入浅出程序设计竞赛(基础篇)》124页的例程。书里对高精度算法讲的很清楚。
#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
using namespace std;
#define maxn 100
struct Bigint{
int len, a[maxn]; // 为了兼顾效率与代码复杂度,用len记录位数,a记录每个数位
Bigint(int x = 0) { // 通过初始化使得这个大整数能够表示整型 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]; // 重载[],可以直接用x[i] 代表x.a[i],编写时更加自然
}
void flatten(int L){ // 一口气处理1到L范围内的进位并重置长度。需要保证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--)
printf("%d", a[i]);
}
};
Bigint operator+(Bigint a, Bigint b){ // 表示两个Bigint类相加,返回一个Bigint类
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); // 答案不超过 len+1 位,所以用 len+1 做一遍“展平”处理进位
return c;
}
Bigint operator*(Bigint a, int b){ // 表示 Bigint类乘整型变量,返回一个 Bigint 类
Bigint c;
int len = a.len;
for(int i=1; i<=len; i++)
c[i] = a[i] * b; // 计算贡献
c.flatten(len+11); // int 类型最长10位,所以可以这样做一遍“展平”处理进位
return c;
}
int main()
{
Bigint ans(0), fac(1); // 分别用0和1初始化 ans 与 fac,如果要将常数赋值给大整数,可以使用类似于 ans = Bigint(233)的办法
int m;
cin >> m;
for(int i=1; i<=m; i++) {
fac = fac * i; // 模拟题意
ans = ans + fac;
}
ans.print(); // 输出答案
return 0;
}