70分代码求大佬调
查看原帖
70分代码求大佬调
1041101
Aventurine_stone楼主2023/12/21 16:52
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=10000010;
ll n;
char s[N],v[N];
ll cnt;
ll w;
ll maxx;
void jin(ll idx)
{
	maxx=max(maxx,idx);
	s[idx]-=10;
	if(s[idx+1]==0)
		s[idx+1]='0';
	s[idx+1]++;
	if(s[idx+1]>'9')
		jin(idx+1);
}
void qf(string f)
{
	for(ll i=f.length()-1,j=0;i>=0;i--,j++)
		s[j]=f[i];
}
void cheng(string c,ll b)
{
	ll len=c.length();
	maxx=0;
	for(ll i=0;i<len;i++)
		s[i]=0;
	for(ll i=len-1,k=0;i>=0;i--,k++)
	{
		ll j=0;
		w=(c[i]-'0')*b;
		cnt=-1;
		while(w)
		{
			v[++cnt]=w%10+'0';
			w/=10;
		}
		while(j<=cnt)
		{
			maxx=max(maxx,j+k);
			if(s[k+j]==0)
				s[k+j]='0';
			s[k+j]+=v[j]-'0';
			if(s[k+j]>'9')
				jin(k+j);
			j++;
		}
	}
	for(ll i=0;i<maxx;i++)
	{
		if(s[i]==0)
			s[i]='0';
	}
	qf(s);
	ll ch=strlen(s);
	if(ch>500)
	{
		for(int i=0,j=ch-500;i<500;i++,j++)
			s[i]=s[j];
		for(int i=500;i<ch;i++)
			s[i]=0;
	}
}
char ans[510];
ll idx;
ll wei;
int main()
{
	scanf("%lld",&n);
	wei=(n*0.30102999566)+1;
	printf("%lld\n",wei);
	s[0]='1';
	while(n>=58)
	{
		cheng(s,288230376151711744);
		n-=58;
	}
	while(n>=10)
	{
		cheng(s,1024);
		n-=10;
	}
	while(n>=3)
	{
		cheng(s,8);
		n-=3;
	}
	while(n--)
		cheng(s,2);
	ll len=strlen(s);
	s[len-1]--;
	if(len<500)
	{
		for(int i=1;i<=500-len;i++)
			ans[i]='0';
		for(int i=0,j=501-len;i<len;i++,j++)
			ans[j]=s[i];
	}
	else
	{
		for(int i=len-500,j=1;i<len;i++,j++)
			ans[j]=s[i];
	}
	idx=1;
	for(int i=1;i<=10;i++)
	{
		for(int j=1;j<=50;j++,idx++)
		{
			printf("%c",ans[idx]);
		}
		printf("\n");
	}
	return 0;
}
2023/12/21 16:52
加载中...