记录编号 |
549721 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2003]麦森数 |
最终得分 |
100 |
用户昵称 |
锝镆氪锂铽 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.013 s |
提交时间 |
2020-02-21 16:04:08 |
内存使用 |
5.46 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
const int maxN=1000;
struct hugenum{
int s[maxN];
int size;
int sign;
hugenum operator*(hugenum b){
int i,j;
hugenum out;
memset(out.s,0,sizeof(out.s));
out.sign=sign*b.sign;
for(i=1;i<=size;i++){
for(j=1;j<=b.size;j++){
if(i+j-1>500)break;
out.s[i+j-1]+=(s[i]*b.s[j]);
}
}
for(i=1;i<maxN;i++){
if(out.s[i-1]/10>0)
out.s[i]+=out.s[i-1]/10;
out.s[i-1]%=10;
}
for(i=maxN-1;i>=1;i--)
if(out.s[i])
break;
out.size=i;
if(out.size>500)out.size=500;
return out;
}
void print(){
int i,flag=0;
if(sign==-1)
printf("-");
else if(sign==0){
printf("0");
return;
}
for(i=500;i>=1;i--){
if(i>size){
if(i%50==0)
printf("\n");
printf("0");
continue;
}
if(i%50==0)
printf("\n");
if(flag)
printf("%d",s[i]);
else if(s[i])
printf("%d",s[i]),flag=1;
}
}
void scan(){
memset(s,0,sizeof(s));
int i=0,j;
char in[maxN];
scanf("%s",in);
if(in[0]=='-')
sign=-1,i++;
else if(in[0]=='0')
sign=0;
else
sign=1;
size=strlen(in)-i;
for(j=size;j>0;i++,j--)
s[j]=in[i]-'0';
}
};
int mas(){
freopen("mason.in","r",stdin);
freopen("mason.out","w",stdout);
int p,m=0,n=0;
scanf("%d",&p);
printf("%d\n",(int)((p*log10(2))+1));
hugenum ans,base,tmp;
ans.s[1]=1;ans.sign=1;ans.size=1;
base.s[1]=2;base.sign=1;base.size=1;
while(p!=0){
m++;
if(p&1){
n++;
tmp=ans*base;
ans=tmp;
}
tmp=base*base;
base=tmp;
p>>=1;
}
//printf("%d\n%d\n",m,n);
ans.s[1]--;
//ans.print();
for(int i=500;i>=1;i--){
if(i%50==0)printf("\n");
printf("%d",ans.s[i]);
}
return 0;
}
int lol=mas();
int main(void){;}