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 T(1 leq T leq 100), 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
", k);
38                     break;                    
39                 }
40             }
41             if(flag!=2)
42                 ++last;
43         }
44     }
45     return 0;
46 }
原文地址:https://www.cnblogs.com/firstrate/p/3198169.html