probable__ @ 2023-11-22 16:42:01
代码如下:
#include<bits/stdc++.h>
using namespace std;
char listt[5002][5002]={{},{'0','1'},{'0','2'}};
int leen[5002]={1,1,1},flag=0;
void gjd(int nn){
leen[nn]=max(leen[nn-1],leen[nn-2]);
flag=0;
for(int i=1;i<=leen[nn];i++){
listt[nn][i]=(listt[nn-1][i]-'0'+listt[nn-2][i]-'0'+flag)%10+'0';
flag=(listt[nn-1][i]-'0'+listt[nn-2][i]-'0'+flag)/10;
}
if(flag) listt[nn][++leen[nn]]='1';
}
int main(){
memset(listt,0x30,sizeof(listt));
listt[1][1]='1';listt[2][1]='2';
int n;
cin>>n;
for(int i=3;i<=n;i++) gjd(i);
for(int i=leen[n];i>=1;i--) cout<<listt[n][i];
return 0;
}
这道题的代码在Dev上能够运行并且正确,但是在洛谷上编译不过去,在线求助大佬!\ 谢谢!!
by Bruce1230 @ 2023-11-22 16:45:19
@TLEMLE 你这代码没有问题啊!
by Terrible @ 2023-11-22 16:49:50
@TLEMLE
char listt[5002][5002]={{},{'0','1'},{'0','2'}};
编译后产生的可执行程序中每个元素都对应一个专门的初始化指令。
这样会导致编译后生成的可执行文件过大,超过洛谷编译程序结果的上限所以会编译失败。
对于大数组不应当使用赋初值的方式赋值,请在程序中使用专门的语句对特定元素赋值。
注:给全局数组赋值全零的情况会被优化,其他情况都会出现上面的情况。
by probable__ @ 2023-11-25 11:19:28
@Terrible 谢谢大佬!!!