SZU:B54 Dual Palindromes

时间:2023-03-09 09:20:34
SZU:B54 Dual Palindromes

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 SZU:B54 Dual Palindromes, 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[];
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=;
for(r=;r<=;r++){
i=;
num=k;
mark=; while(num>){
t=num%r;
A[i]= t+'';
++i;
num/=r;
}
len = i-; for(i=,j=len;i<=j;i++,j--){
if(A[i]!=A[j])
mark=;
} if(mark==){
flag++;
}
if(flag==){
printf("%d\n", k);
break;
}
}
if(flag!=)
++last;
}
}
return ;
}