#2#9#10WA不知道怎么错了,求助
查看原帖
#2#9#10WA不知道怎么错了,求助
240709
woshishuilaizhe楼主2023/10/2 18:32
//P1045 [NOIP2003 普及组] 麦森数 
#include<iostream>
#include<cmath>
using namespace std;
int m[499];
int cheng1()
{
	for(int i=499;i>=0;i--)m[i]*=2;
	for(int i=499; i>=0; i--)
	{
		while(m[i]>9)
		{
			m[i] -= 10;
			if(i-1>=0)m[i-1]++;
		}
	}
}
int cheng2()
{
	int n[499];
	for(int i=499;i>=0;i--)n[i]=0;
	for(int i=499; i>=0; i--)
	{
		for(int j=499; j>=0; j--)
		{
			if(i+j-499>=0)n[i+j-499]+=m[i]*m[j];
		}
	}
	for(int i=499;i>=0;i--)m[i]=n[i];
	for(int i=499; i>=0; i--)
	{
		while(m[i]>9)
		{
			m[i] -= 10;
			if(i-1>=0)m[i-1]++;
		}
	}
}
int main()
{
	int p, s[499], sl=0;
	for(int i=499;i>=0;i--)m[i]=0,s[i]=0;
	m[499]=1;
	cin >> p;
	int p1=p, p2=0, p3=0;
	cout << (int)(log10(2)*p+1) << endl;
	while(p1>100000)
	{
		if(p1%2==0)s[sl]=1,sl++,p1/=2;
		else s[sl]=2,sl++,p1--,p1/=2;
	}
	for(int i=1;i<=p1;i++)cheng1();
	for(int i=0; s[i]!=0; i++)
	{
		if(s[i]==1)cheng2();
		if(s[i] == 2)
		{
			cheng2();
			cheng1();
		}
	}
	m[499]--;
	for(int i=0; i<10; i++)
	{
		for(int j=0; j<50; j++)
		{
			cout << m[i*50+j];
		}
		cout << endl;
	}
	return 0;
}
2023/10/2 18:32
加载中...