记录编号 150327 评测结果 AAAAAAAAAA
题目名称 [NOIP 2003]麦森数 最终得分 100
用户昵称 Gravatar0 是否通过 通过
代码语言 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;
}