时间限制:1000MS 内存限制:256000KB
题目描述
我们说一个数字 X 如果从左到右和从右到左是一样得就是回文数。例如75457就是一个回文数。当然,这性质还依赖它的进制。17在十进制下不是回文数,不过在二进制下就是回文数了(10001) 。现在就是要判断一个数在2到16进制下是否为回文数。
输入
输入数据由多个整数构成。每个给出的数字 0 < n < 50000各占一行,并且都是以十进制形式给出。输入以零为结束。
输出
你的程序要输出令所给数 X 是回文数的进制。如果这个数在2到16进制里都不是回文数,你的程序就要输出这个数不是回文数的信息。
输入样例
17 19 0
输出样例
Number 17 is palindrom in basis 2 4 16 Number 19 is not a palindrom
#include<bits/stdc++.h>
using namespace std;
int a[10010],c=0;
void h(long long n,long long r)
{
c=0;
while(n!=0)
{
c++;
a[c]=n%r;
n/=r;
}
return;
}
bool y()
{
int k=c,l=1;
while(k>l)
{
if(a[k]!=a[l])
return 0;
k--;
l++;
}
return 1;
}
int main()
{
long long n,i=2,s[10010],m;
bool z;
cin>>n;
while(n!=0)
{
z=0;
m=0;
for(int i=2;i<=16;i++)
{
h(n,i);
if(y()==1)
{
s[++m]=i;
z=1;
}
}
if(z==1)
{
printf("Number %d is palindrom in basis ",n);
for(long long i=1;i<=m;i++)
cout<<s[i]<<' ';
}
else
printf("Number %d is not a palindrom",n);
cout<<endl;
cin>>n;
}
}