求助咋一直过不了

P1255 数楼梯

lzmh_zwb @ 2022-03-05 21:47:03

代码:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
struct bigint{
    int len,a[100];
    bigint(int 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];
    }
    void flatten(int 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 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);
    return c;
}
int main()
{
    bigint f[5010];
    f[1]=bigint(1);
    f[2]=bigint(2);
    cin>>n;
    for(int i=3;i<=n;i++)
      f[i]=f[i-1]+f[i-2];
    f[n].print();
    return 0;
}

提交完后四个测试点都是WA 有没有大佬能帮看一下啥问题?


by Terrible @ 2022-03-05 21:56:52

高精内部的数组不够大,开到2000应该就可以了。

int len,a[2000];

@zengweibang


by lzmh_zwb @ 2022-03-05 22:10:28

@Terrible 能打开运行,过几秒就显示“停止工作”了,改回去又行


by Terrible @ 2022-03-05 22:13:29

@zengweibang

本地测试的时候栈空间不够了,因为你把结构体变量定义在了主函数里,导致储存超出了栈空间的默认设定。

但是洛谷提交的时候栈空间是几乎不限量的。直接提交即可。

如果你想本地测试的话,可以

1.把 bigint f[5010]; 放到主函数外面的全局区。

2.开大栈空间

编译器选项中加入 -Wl,-stack=134217728 其实后面随便写一个比较大的数就行。


by lzmh_zwb @ 2022-03-05 22:25:57

已经过了,感谢大佬帮助!!!


|