记录编号 89722 评测结果 AAAAAAAAAA
题目名称 [NOIP 2003]麦森数 最终得分 100
用户昵称 Gravatarsywgz 是否通过 通过
代码语言 C++ 运行时间 0.068 s
提交时间 2014-03-03 20:53:09 内存使用 0.32 MiB
显示代码纯文本
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int p,ans[501]={0},l[501]={0};
void add(int a[],int b[]);
int main(){
	freopen("mason.in","r",stdin);
	freopen("mason.out","w",stdout);
	cin>>p;
	cout<<floor(p*log10(2.0)+1)<<endl;
	ans[0]=1;l[0]=2;
	for (;p>0;p>>=1){
		if (p%2) add(ans,l);
		add(l,l);
	}
	int c=0;
	if (ans[0]<1){
		ans[0]=9;c=1;
	}
	else
		ans[0]-=1;
	for (int i=1;c && i<500;i++){
		ans[i]-=c;
		if (ans[i]<0){
			c=1;ans[i]+=10;
		}
		else
			c=0;
	}
	for (int i=499;i>=0;i--){
		cout<<ans[i];
		if (i%50==0) cout<<endl;
	}
}
void add(int a[],int b[]){
	int t[501]={0};
	for (int i=0;i<500;i++)
		for (int j=0;j<500;j++)
			if (i+j<500)t[i+j]+=a[i]*b[j];
	for (int i=0;i<500;i++){
		t[i+1]+=t[i]/10;
		a[i]=t[i]%10;
	}
}