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):
Solutions to this problem do not require manipulating integers larger than the standard 32 bits.
A single line with space separated integers N and S.
3 25
26 27 28
好简单的水题,0MS暴过
/* ID: xinming2 PROG: dualpal LANG: C++ */ #include <cstdio> #include <cmath> #include <algorithm> #include <iostream> #include <cstring> #include <map> #include <string> #include <stack> using namespace std; char s[10]; char a[10]; bool is_pal(char *s) { int n = strlen(s); for(int i = 0 ; i <= n / 2 ; i++) { if(s[i] != s[n - i - 1])return 0; } return 1; } void fun(int x , int k, char *s) { int a , b , c = 0 ; b = x; while(b >= k) { a = b % k; b = b / k; s[c++] = a + '0'; } s[c] = b + '0'; } int main() { freopen("dualpal.in","r",stdin); freopen("dualpal.out","w",stdout); int N , S , k; while(cin >> N >> S) { while(N--) { while(S++) { int num = 0; int ok = 0; for(int i = 2 ; i <= 10 ; i++) { memset(s , 0 , sizeof(s)); fun(S , i , s); if(is_pal(s))num++; if(num == 2) { ok = 1; break; } } if(ok) { printf("%d\n",S); break; } } } } return 0; } /* */