repeat_麦森数
//
#include<bits/stdc++.h>
using namespace std;
const int MAXN=500;
int ans[ MAXN+11 ];
int sq[ MAXN+11 ];
void bigmul( int a[],int b[] )
{
int i,j,pos,temp[ MAXN+11 ];
memset( temp,0,sizeof( temp ) );
for( i=0;i<MAXN+5;i++ )
{
for( j=0;i+j<MAXN+5;j++ ) // i+j < MAXN+5
{
temp[i+j]+=a[i]*b[j]; // i+j
}
}
for( i=0;i<=MAXN;i++ )
{
temp[i+1]+=temp[i]/10;
a[i]=temp[i]%10; // 忘带下标
}
}
void fastpow( int p )
{
while( p )
{
if( p&1 ) bigmul( ans,sq );
bigmul( sq,sq );
p>>=1;
}
}
int main()
{
int p,i;
while( ~scanf("%d",&p) )
{
printf("%d\n",(int)( log10(2)*p+1 ) );
memset( ans,0,sizeof( ans ) );
memset( sq,0,sizeof( sq ) );
ans[0]=1; sq[0]=2; // 忘记初始化
fastpow( p );
for( i=MAXN-1;i;i-- ) // 可以用 i 简化 i>0
{
printf("%d",ans[i]);
if( i%50==0 ) printf("\n"); // 按要求输出
}
printf("%d\n",ans[i]-1); // 按要求输出
}
return 0;
}
//
find:
01 初始化
02 太多数组 检查数组名及其下标
03 按要求输出