求助,一个点没过

#include <cstdio>
using namespace std;
int c[1000000],n;
int main() {
    c[0]=1;
    int i,j,k,l=0,ans=0;
    scanf("%d",&n);
    for (k=2;k<=n;k++) {
        for (i=0;i<=l;i++)
            c[i]*=k;
        for (i=0;i<=l;i++) {
            c[i+1]+=c[i]/10;
            c[i]%=10;
        }
        while (c[i]>10) {
            c[i+1]+=c[i]/10;
            c[i]%=10;
            i++;
        }
        l=i;
        while (c[l]==0&&l>0) l--;
    }
    for (i=0;i<=l;i++) ans+=c[i];
    printf("%d",ans);
    if (ans==2||ans==3) printf("T\n");
    else printf("F\n");
    return 0;
}

第三个点啊,怎么就过不了呢?

1 条评论

  • @ 2016-12-07 18:33:41

    好吧我找出来那个错了。
    把自己程序出的结果和别人打的表比了一下,n为27时会有一个10的进位,没错我在进位时把
    c++
    while (c[i]>=10)

    写成
    c++
    while (c[i]>10)

    希望不要再犯这么蠢的错误。。。

  • 1

信息

ID
1200
难度
4
分类
数论 | 素数判定 点击显示
标签
(无)
递交数
3393
已通过
1348
通过率
40%
被复制
12
上传者