以用高精度,但是不知道输出都是0,求助大佬,帮我看看哪一步错了
查看原帖
以用高精度,但是不知道输出都是0,求助大佬,帮我看看哪一步错了
312780
456laji楼主2020/5/7 13:03

代码丑陋,见谅。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=500;
const int N=909526; 
int num[N],len=0,p,n;

inline int read()
{
	int x=0,f=1;
	char c=getchar();
	while(c>'9'||c<'0')
	{
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}

int a[N],b[N],c[N];

int s(int *temp,int lent)
{
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b)); 
	memset(c,0,sizeof(c)); 
	for(int i=0;i<=lent;i++)
		a[i]=temp[i],b[i]=temp[i];
	int up=0;
	for(int j=0;j<=lent;j++)
	{
		up=0;
		for(int i=0;i<=lent;i++)
		{
			c[i+j]+=a[i]*b[j]+up;//printf("%d %d %d\n",a[i],b[j],c[i+j]);
			up=c[i+j]/10;
			c[i+j]%=10;
		}
		c[lent+j]=up;
	}
	int lenc=lent*2;
	while(lenc>0&&c[lenc]==0)
		lenc--;//printf("lenc=%d\n",lenc);
	 for(int i = lenc; i >=0 ; i--) // 逆序输出
        cout << c[i];cout<<endl;
	len=lenc;
	return *c;
}

int ksm(int k)
{
	if(k*2>n) return 0;//printf("k=%d  len=%d\n",k,len);
	*num=s(num,len);
	/*for(int i = len; i >=0 ; i--) // 逆序输出
        cout << num[i];cout<<endl;*/
	p=pow(2,k);
	ksm(p);
}

int main()
{
	ll res,j=0,a=0;
	num[0]=2;
	n=read();
	ksm(1);
	printf("%d\n",len);
	if(len-1<500)
	{
		a=500-len;
		for(int i=0;i<a;i++)
		{
			j++;
			printf("0");
			if(j==50) j=0,printf("\n");
		}
	}
	j--;
	if(len>500) a=len-500;
	else a=0;
	for(int i=0;i<len;i++)
	{
		if(num[0]>=1)
		{
			num[0]-=1;
			break;
		}
		else
		{
			if(num[i]>=i)
			{
				for(int y=i-1;y>=0;y--)
					num[y]+=1;
				num[0]-=1;
				break;
			} 	
		}
	
	}
	for(int i=len-1;i>=a;i--)
	{
		j++;
		printf("%d",num[i]);
		if(j==50) j=0,printf("\n");
	}	
	return 0;
} 
2020/5/7 13:03
加载中...