ZOJ-1078 多进制回文相等

1078:给出一个十进制数。求在2到16进制下构成回文的进制。

Sample Input

17
19
0



Sample Output

Number 17 is palindrom in basis 2 4 16
Number 19 is not a palindrom


思路:简单题。进行进制转换。由于要判断回文,正序和逆序都可。因此采用循环取余即可。
回文判断采用首尾比较的方法。

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;

char val[16];
char ref[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

void convertBase(int num,int base)
{
	int i=0;
	while(num)
	{
		val[i]=ref[num%base];
		num/=base;
		i++;
	}
	val[i]='\0';
}

bool reverseEqual(char *p)
{
	int len=strlen(p);
	bool equal=true;
	for(int i=0;i<len/2;i++)
	{
		if(p[i]!=p[len-1-i])
		{
			equal=false;
			break;
		}
	}
	return equal;

}

int main()
{

	int number;
	bool isPalindrom;
	while(1)
	{
		cin>>number;
		isPalindrom=false;
		if(number==0)
			break;
		for(int i=2;i<=16;i++)
		{
			convertBase(number,i);
			if(reverseEqual(val))
			{
				if(isPalindrom==false)
				{
					isPalindrom=true;
					printf("Number %d is palindrom in basis",number);
					printf(" %d",i);
				}
				else
				{
					printf(" %d",i);
				}

			}
			

		}
		if(isPalindrom==false)
			printf("Number %d is not a palindrom",number);
		printf("\n");

	}
	
}


你可能感兴趣的:(ZOJ)