您的位置:首页 > 其它

SZU:B54 Dual Palindromes

2013-07-18 14:30 183 查看

Judge Info

Memory Limit: 32768KB

Case Time Limit: 10000MS

Time Limit: 10000MS

Judger: Number Only Judger

Description

A number that reads the same from right to left as when read from left to right is called a palindrome. The number 12321 is a palindrome; the number 77778 is not. Of course, palindromes have neither leading nor trailing zeroes, so 0220 is not a palindrome.

The number 21 (base 10) is not palindrome in base 10, but the number 21 (base 10) is, in fact, a palindrome in base 2 (10101).

Write a program that reads two numbers (expressed in base 10):

N (1 <= N <= 15)

S (0 < S < 10000)

and then finds and prints (in base 10) the first N numbers strictly greater than S that are palindromic when written in two or more number bases (2 <= base <= 10). Solutions to this problem do not require manipulating integers larger than the standard 32 bits.

Input

The first line of input contains

, the number of test cases.

For each test case, there is a single line with space separated integers N and S.

Output

For each test case output N lines, each with a base 10 number that is palindromic when expressed in at least two of the bases 2..10. The numbers should be listed in order from smallest to largest.

Sample Input

2
3 25
1 25


Sample Output

26
27
28
26


解题思路:找两个1~10进制之间的回文数字,当时看成找1个回文数字就可以通过,所以导致好久才AC,看题失误!

#include <stdio.h>
#include <string.h>

char A[200];
int main()
{
int num,r,i,n,j,t,k,ke,mark,len,last,flag;
scanf("%d",&n);
while(n--){
scanf("%d %d",&last, &k);
while(last--){
++k;

flag=0;
for(r=2;r<=10;r++){
i=0;
num=k;
mark=1;

while(num>0){
t=num%r;
A[i]= t+'0';
++i;
num/=r;
}
len = i-1;

for(i=0,j=len;i<=j;i++,j--){
if(A[i]!=A[j])
mark=0;
}

if(mark==1){
flag++;
}
if(flag==2){
printf("%d\n", k);
break;
}
}
if(flag!=2)
++last;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: