您的位置:首页 > 其它

ZOJ Problem Set - 1078 Palindrom Numbers

2013-07-04 01:10 393 查看
ZOJ Problem Set - 1078

Palindrom Numbers

Time Limit: 2 Seconds
Memory Limit: 65536 KB

Statement of the Problem
We say that a number is a palindrom if it is the sane when read from left to right or from right to left. For example, the number 75457 is a palindrom.

Of course, the property depends on the basis in which is number is represented. The number 17 is not a palindrom in base 10, but its representation in base 2 (10001) is a palindrom.

The objective of this problem is to verify if a set of given numbers are palindroms in any basis from 2 to 16.

Input Format

Several integer numbers comprise the input. Each number 0 < n < 50000 is given in decimal basis in a separate line. The input ends with a zero.

Output Format

Your program must print the message Number i is palindrom in basis where I is the given number, followed by the basis where the representation of the number is a palindrom. If the number is not a palindrom in any basis between 2 and 16, your program
must print the message Number i is not palindrom.

Sample Input

17

19

0

Sample Output

Number 17 is palindrom in basis 2 4 16

Number 19 is not a palindrom

AC代码:

#include<iostream>

#include<stdio.h>

#include<string>

using namespace std;

int a[1000];

bool isp(int len)

{

int k=(len)/2;

for(int i=0;i<k;i++)

{

if(a[0+i]!=a[len-1-i])

return false;

}

return true;

}

int main()

{

int num;

while((cin>>num)&&num)

{

string re="";

for(int i=2;i<=16;i++)

{

int temp=num;

int len=0;

while(temp)

{

a[len++]=temp%i;

temp/=i;

}

if(isp(len))

{

re+=i;

}

}

if(re!="")

{

cout<<"Number "<<num<<" is palindrom in basis";

for(int i=0;i<re.length();i++)

{

cout<<" "<<(int)re[i];

}

cout<<endl;

}

else

{

cout<<"Number "<<num<<" is not a palindrom"<<endl;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: