题意:
给出一个数,输出比这个数大的最小的回文数。
参照了http://blog.csdn.net/sunacmer/article/details/7399693
#include <cstdio>
#include <cstring>
const int maxn = 1000005;
int n, num[maxn];
char str[maxn];
inline bool cmp() {
for(int i = 0; i < n; i++)
if(num[i] < str[i] - '0') return 1;
else if(num[i] > str[i] - '0') return 0;
return 1;
}
int main() {
int T; scanf("%d", &T);
while(T--) {
scanf("%s", str); n = strlen(str);
if(n == 1) {
if(str[0] == '9') printf("11\n");
else printf("%c\n", str[0] + 1);
continue;
}
for(int i = n >> 1; i >= 0; i--) num[i] = num[n - i - 1] = str[i] - '0'; num[n] = 0;
if(cmp()) {
int st = n >> 1; num[st]++;
for(int i = st; num[i] > 9; i++) {
num[i] = 0;
num[i + 1]++;
if(i == n - 1) n++;
}
for(int i = 0; i < st; i++) num[i] = num[n - i - 1];
}
for(int i = 0; i < n; i++) printf("%d", num[i]);
printf("\n");
}
return 0;
}