cjr1221 @ 2023-12-26 17:55:30
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int real[200000000] = { 1,1 };
int main()
{
int n;
cin >> n;
int len = 1;
while ((n--) > 0 && len <= 500)
{
int i = 1;
int z = 0;
for (; i <= len; i++)
{
real[i] *= 2;
real[i] += z;
z = 0;
while (real[i] >= 10)
{
z= real[i] / 10;
real[i] %= 10;
if (i==len&&z!=0)
len++;
}
}
}
real[1] -= 1;
int t = 0;
for (int i = 500; i > 0; i--)
{
cout << real[i];
t++;
if (t == 50)
{
cout << endl;
t = 0;
}
}
return 0;
} ```
by Terrible @ 2023-12-26 18:06:38
@cjr1221
int real[200000000] = { 1,1 };
一般请不要用 {}
给一个大数组赋初值,因为这样赋值,数组里每一个值都要对应可执行文件中的一条指令,也就是说会产生 200000000
条指令,导致编写出的可执行文件过大,超过洛谷设置的编译空间上限,从而 CE。(你也不看看你本地的可执行文件.exe 有多大?)特例是,数组放到全局区并全部赋值 0 的操作。由于全局区变量本就会被清零,所以会被编译器优化。
应该改写成 real[0]=real[1]=1
的赋值操作。
另外,你这个数组开太大,明显超过了本题给的空间限制,单论 real
数组也要
by cjr1221 @ 2023-12-26 18:42:46
@Terrible 谢谢谢谢