记录编号 |
150327 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2003]麦森数 |
最终得分 |
100 |
用户昵称 |
0 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.060 s |
提交时间 |
2015-02-28 20:37:55 |
内存使用 |
0.32 MiB |
显示代码纯文本
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define d "2"//a^n = a^(n/2)*a^(n/2)*f(a),其中f(a) = 1(n%2==0)或f(a) = a(n%2==1)
using namespace std;
string s="2";
string gaojing(string ,string );
string gaojing(string sa,string sb)
{
int a[1001]={0};
int b[1001]={0};
int c[2001]={0};
int i,j,x;
string liehuo;
a[0]=sa.size();
b[0]=sb.size();
for(i=1;i<=a[0];i++)
a[i]=sa[a[0]-i]-48;
for(i=1;i<=b[0];i++)
b[i]=sb[b[0]-i]-48;
for(i=1;i<=a[0];i++)
{
x=0;
for(j=1;j<=b[0];j++)
{
c[i+j-1]=a[i]*b[j]+c[i+j-1]+x;
x=c[i+j-1]/10;
c[i+j-1]%=10;
}
c[i+b[0]]=x;
}
int lc=a[0]+b[0]+1;
/*while(c[lc]==0&&lc>1)
lc--;*/
for(i=lc;i>=1;i--)
liehuo+=c[i]+48;
if(liehuo.size()>500)
liehuo.erase(0,liehuo.size()-500);
return liehuo;
}
void f(int );
void f(int n)
{
if(n==1)
return ;
f(n/2);
if(n%2==0)
{
s=gaojing(s,s);
return ;
}
s=gaojing(d,gaojing(s,s));
return ;
}
int main()
{
freopen("mason.in","r",stdin);
freopen("mason.out","w",stdout);
int n;
cin>>n;
f(n);
int weishu=floor(n*log10(2))+1;
cout<<weishu<<endl;
for(int i=1;i<=500-s.size();++i)
s="0"+s;
if(s.size()>500)
s.erase(0,s.size()-500);
for(int i=0;i<=498;++i)
{
if(i%50==0&&i!=0)
cout<<endl;
cout<<s[i];
}
char bu=s[499]-1;
cout<<bu;
//system("pause");
return 0;
}