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 , 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 }

 

你可能感兴趣的:(dual)