用的是高精度,只有第四个是正确,但下载的第一个数据自己代入是对的,求助
查看原帖
用的是高精度,只有第四个是正确,但下载的第一个数据自己代入是对的,求助
363668
GuiltyOrange楼主2020/11/10 16:25
//高精度 
#include<iostream>
#include<string>
using namespace std;
int n ;  // n进位 
int jia(int *a,int *b)
{
	for(int i=1;i<1000;i++)
	{
		a[i]=a[i]+b[i];
		a[i+1]+=a[i]/n;
		a[i]=a[i]%n;
	}
}
int fuzhi(int *a,int *b)       //将a的倒位数赋值给b 
{
	int ws(1),flag(0);
	for(int i=1000;i>0;i--)
	{
		if(a[i]!=0)
		    flag=1;
		if(flag)
		{
			b[ws]=a[i];
			ws++;
		}
	}
}
int p(int *a,int *b)        //检测a以及其倒位的值是否相同 
{
	for(int i=1;i<1000;i++)
	{
		if(a[i]!=b[i])
		{
			return 0 ;
		}
	}
	return 1;
}
int main()
{
	int a[1000]={0},b[1000]={0};
	char c[100]={'0'};           //应付16进制的情况 
	int m;
	cin >> n ;
	if(n==16)
	{
		cin >> c;
		for(int i=1;i<1000;i++)
		{
			if(c[i]>='0'&&c[i]<='9')
			    a[i]=c[i]-'0';
			if(c[i]>='a'&&c[i]<='f')
			    a[i]=c[i]-'a'+10;
			if(c[i]>='A'&&c[i]<='F')
			    a[i]=c[i]-'A'+10;
		}
	}
	else
	{
		cin >> m;
	    for(int i=1;i<1000;i++)
	    {
		    a[i]=m%10;
		    m/=10;
	    }
    }  
	fuzhi(a,b);
	int step(0);
	while(1)
	{
		jia(a,b);
		
		fuzhi(a,b);
		step++;
		if(step==31)
		{
			cout << "Impossible!";
			return 0; 
		}
		if(p(a,b))
	    {
	    	cout << "STEP=" << step;
	    	return 0;
		}
	}
}
2020/11/10 16:25
加载中...