您的位置:首页 > 其它

【SPOJ-PALIN】The Next Palindrome【模拟】

2016-02-25 16:46 253 查看
题意:

给出一个数,输出比这个数大的最小的回文数。

参照了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
= 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  模拟