C++从入门到入土-回文数(高精度算法)

回文数(高精度算法)

题目如下:

可能是高精度算法的吧...

#include<cstdio>  
#include<cctype>  
#include<cstring>  
#include<cstdlib>  
#define maxn 100  
using namespace std;  
int n,a[2][maxn];  
char s[maxn];  
bool huiwen(int x)  
{  
  int i,j,k;  
  i=1,j=a[x][0];  
  for(;i<j;i++,j--)  
    if(a[x][i]!=a[x][j])return 0;  
  return 1;    
}  
void readdata()  
{  
  int i,j,k;  
  scanf("%d%s",&n,s);  
  k=strlen(s);  
  for(i=k-1;i>=0;i--)  
    {  
      if(isdigit(s[i]))j=s[i]-'0';  
      if(islower(s[i]))j=s[i]-'a'+10;  
      if(isupper(s[i]))j=s[i]-'A'+10;  
      a[0][++a[0][0]]=j;  
    }  
  if(huiwen(0)){printf("STEP=0\n");exit(0);}    
}  
void add(int x)  
{  
	int i,j,k,last,y=1-x;  
	a[x][0]=a[y][0];  
	for(last=0,i=1;i<=a[y][0];i++)  
	{  
		j=a[y][0]+1-i;  
		a[x][i]=a[y][i]+a[y][j]+last;  
		last=a[x][i]/n,a[x][i]%=n;  
	}  
	if(last>0)a[x][++a[x][0]]=last;    
}  
int main()  
{  
	freopen("huiwen.in","r",stdin);
	freopen("huiwen.out","w",stdout);
	 
	readdata();  
	for(int i=1;i<=30;i++)  
	{  
		add(i%2);  
		if(huiwen(i%2))
		{
			printf("%d\n",i);
			return 0;
		}  
	}  
	printf("Impossible\n");  
	fclose(stdin);
	fclose(stdout); 
	return 0;  
}  
蒟蒻也要努力!

猜你喜欢

转载自blog.csdn.net/qq_41993986/article/details/79938091