求助大佬,为什么Dev上能正常编译的代码会CE
查看原帖
求助大佬,为什么Dev上能正常编译的代码会CE
130547
奥特战士楼主2020/10/28 16:14

代码如下

#include<bits/stdc++.h>
using namespace std;
const int N=2e6;
int p;
int tmp[N],ans[N]={0,1},num[N]={0,2},lena=1,lenb=1;
inline int read(){
	int s=1,w=0;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')s=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){w=(w<<3)+(w<<1)+ch-'0';ch=getchar();}
	return s*w;
}
inline void write(int x){
	if(x<0){
		putchar('-');
		x=-x;
	}
	if(x>9)write(x/10);
	putchar(x%10+'0');
	return;
}
void gjca(){
	int len=lena+lenb-1;
	for(int i=1;i<=lena;i++){
		for(int j=1;j<=lenb;j++){
			tmp[i+j-1]+=ans[i]*num[j];
		}
	}
	for(int i=1;i<=len;i++){
		tmp[i+1]+=tmp[i]/10;
		tmp[i]%=10;
	} 
	while(tmp[len+1]>0){
		len++;
		tmp[len+1]+=tmp[len]/10;
		tmp[len]%=10;
	}
	for(int i=1;i<=len;i++){
		ans[i]=tmp[i];
		tmp[i]=0;
	}
	lena=len;
	return;
}
void gjcb(){
	int len=2*lenb-1;
	for(int i=1;i<=lenb;i++){
		for(int j=1;j<=lenb;j++){
			tmp[i+j-1]+=num[i]*num[j];
		}
	}
	for(int i=1;i<=len;i++){
		tmp[i+1]+=tmp[i]/10;
		tmp[i]%=10;
	} 
	while(tmp[len+1]>0){
		len++;
		tmp[len+1]+=tmp[len]/10;
		tmp[len]%=10;
	}
	for(int i=1;i<=len;i++){
		num[i]=tmp[i];
		tmp[i]=0;
	}
	lenb=len;
	return;
}
void ksm(int p){
	while(p){
		if(p&1)gjca();
		p>>=1;
		gjcb();
	}
	return;
}
int main(){
	p=read();
	ksm(p);
	ans[1]--;
	write(lena);
	for(int i=500;i>=1;i--){
		if(i%50==0)puts("");
		putchar(ans[i]+'0');
	}
	return 0;
}
2020/10/28 16:14
加载中...