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 LYBT @ 2023-12-09 14:57:29
你猜tag里面的高精度是什么
by xiaoshumiao @ 2023-12-09 14:58:05
@EricOO7 此题需要用高精度。
by LYBT @ 2023-12-09 14:59:00
50!是一个很大的数,普通的数据类型不支持这么大的运算
by LYBT @ 2023-12-09 15:01:02
如果你不知道高精度的话,这里给你一个思路:你用一个数组来存一个数,数组每个空间存这个数字的其中一位
by LYBT @ 2023-12-09 15:01:53
然后考虑怎么去模拟乘法运算
by EricOO7 @ 2023-12-09 15:03:59
@xiaoshumiao 用递归吗?
by xiaoshumiao @ 2023-12-09 15:05:20
@EricOO7 用数组。可以参考题解来学习。
by EricOO7 @ 2023-12-09 15:07:15
@xiaoshumiao OK
by EricOO7 @ 2023-12-09 15:12:52
@xiaoshumiao 代码:
#include<bits/stdc++.h>
using namespace std;
long long jc(int n)
{
int x;
while(n>0){
if(n-1==1){
jc(n-1) = 1;
}
x = n*jc(n-1);
}
return x;
}
int main(){
long long n,i,s = 0;
cin>>n;
for(i=1;i<=n;i++){
s = jc(i) + s;
}
cout<<s;
return 0;
}
compile error
by xiaoshumiao @ 2023-12-09 15:16:09
@EricOO7 可是你没用高精度啊。编译错误的原因是:
jc(n-1) = 1;