为什么改到快和题解一样了还是0分?

P1009 [NOIP1998 普及组] 阶乘之和

xiao_tuan_zi @ 2024-01-24 11:09:11

#include<bits/stdc++.h>
using namespace std;
int main(){
    int i,a[1005]={0},b[1005]={0},n,j;
    scanf("%d",&n);
    a[0]=b[0]=1;
    for(i=2;i<=n;i++){
        for(j=0;j<100;j++){
            b[j]*=i;
        }
        for(j=0;j<100;j++){
            if(b[j]>9){
                b[j+1]+=b[j]/10;
                b[j]%=10;
            }
        }
        for(j=0;j<100;j++){
            a[j]+=b[j];
            if(a[j]>9){
                a[j+1]+=a[j]/10;
                a[j]%=10;
            }
        }
    }
    for(i=100;1>=0&&a[i]==0;i--){
        for(j=1;j>=0;j--){
            printf("%d",a[j]);
        }
    }
    return 0;
}

by tyr_04 @ 2024-01-24 11:55:50

@minjun 你样例都不测一下的吗?


by tyr_04 @ 2024-01-24 11:56:37

输出那里明显有问题啊


by xiao_tuan_zi @ 2024-01-24 11:56:49

@oier04 ,什么样例


by naromil @ 2024-01-24 11:58:23

输出有问题

for(i=100;1>=0&&a[i]==0;i--);
for(j=i;j>=0;j--){
    printf("%d",a[j]);
}

by tyr_04 @ 2024-01-24 14:03:30

@minjun 题目下面不是有样例吗?


by tyr_04 @ 2024-01-24 14:04:58

一共只输出一个数,不需要用循环输出


by tyr_04 @ 2024-01-24 14:12:47

oh,用的是高精度啊


by tyr_04 @ 2024-01-24 14:17:05

改好了

#include<bits/stdc++.h>
using namespace std;
int main(){
    int i,a[1005]={0},b[1005]={0},n,j,z=0;
    scanf("%d",&n);
    a[0]=b[0]=1;
    for(i=2;i<=n;i++){
        for(j=0;j<1000;j++){
            b[j]*=i;
        }
        for(j=0;j<1000;j++){
            if(b[j]>9){
                b[j+1]+=b[j]/10;
                b[j]%=10;
            }
        }
        for(j=0;j<1000;j++){
            a[j]+=b[j];
            if(a[j]>9){
                a[j+1]+=a[j]/10;
                a[j]%=10;
            }
        }
    }
    for(i=1000;i>=0;i--){
        if(a[i]!=0)
        {
            z=1;
            cout<<a[i];
            continue;
        }
        if(z==1)
        {
            cout<<a[i];
        }
    }
    return 0;
}

by tyr_04 @ 2024-01-24 14:18:42

输出有问题,用高精度时,前面的 0 要舍掉,也不需要用第二层循环。


by tyr_04 @ 2024-01-24 14:19:22

@minjun 求关注


| 下一页