--------------------------------------------------------------------------------
Time Limit: 1 Second Memory Limit: 32768 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
简单题。
题目的意思很简单,就是给出一个数求它在不同进制下是否为回文数.
几个问题:
1,k一开始放循环外面,程序一直不出结果
2.循环里面和外面的标志器不一样
Code :
#include
int main()
{
int n,k,l,sign,i,j;
while(scanf("%d",&n)&&n)
{
int b[17]={0};
int c[50];
for(i=2;i<=16;i++)
{
l=0;
sign=1;
k=n;//k=n放在循环里面,防止被覆盖!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
while(k)
{
c[l++]=k%i;
k=k/i;
}
for(j=0;j<=l/2;j++)//l不能是l+1
if(c[j]!=c[l-j-1]) sign=0;
if(sign==1) b[i]=i;
}
sign=1;//重新定义标志位,前面的被覆盖,sign 取的永远都是i=16时的值。
for(i=2;i<17;i++)
if(b[i]!=0) sign=0;
if(sign)
printf("Number %d is not a palindrom/n",n);
else
{
printf("Number %d is palindrom in basis",n);
for(i=2;i<17;i++)
if(b[i]) printf(" %d",b[i]);
printf("/n");
}
}
return 0;
}
ZOJ 1078 Palindrom Numbers
最新推荐文章于 2020-05-19 21:32:33 发布