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,看题失误!
1 #include <stdio.h> 2 #include < string .h> 3 4 char A[ 200 ]; 5 int main() 6 { 7 int num,r,i,n,j,t,k,ke,mark,len,last,flag; 8 scanf( " %d " ,& n); 9 while (n-- ){ 10 scanf( " %d %d " ,&last, & k); 11 while (last-- ){ 12 ++ k; 13 14 flag= 0 ; 15 for (r= 2 ;r<= 10 ;r++ ){ 16 i= 0 ; 17 num= k; 18 mark= 1 ; 19 20 while (num> 0 ){ 21 t=num% r; 22 A[i]= t+ ' 0 ' ; 23 ++ i; 24 num/= r; 25 } 26 len = i- 1 ; 27 28 for (i= 0 ,j=len;i<=j;i++,j-- ){ 29 if (A[i]!= A[j]) 30 mark= 0 ; 31 } 32 33 if (mark== 1 ){ 34 flag++ ; 35 } 36 if (flag== 2 ){ 37 printf( " %d\n " , k); 38 break ; 39 } 40 } 41 if (flag!= 2 ) 42 ++ last; 43 } 44 } 45 return 0 ; 46 }