P1009 50pts!!!!!

P1009 [NOIP1998 普及组] 阶乘之和

EricOO7 @ 2023-12-09 14:52:58

50分代码

#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;

| 下一页