问题1020:最小回文数
程序员文章站
2022-08-12 10:45:56
最小的回文数描述回文数是从前往后和从后往前得到的数是相同的。现给你一个正整数N,请你找到比N大的最小的那个回文数P。(利用输出回文数的原理进行寻找)输入输入包含多组测试数据。每组输入一个正整数N,N不超过10000位,并且N不包含前导0。输出对于每组输入,输出比N大的最小的那个回文数P。输入样例 1443175输出样例 1554181字符模拟#include #include #...
最小的回文数
描述
回文数是从前往后和从后往前得到的数是相同的。
现给你一个正整数N,请你找到比N大的最小的那个回文数P。
(利用输出回文数的原理进行寻找)
输入
输入包含多组测试数据。
每组输入一个正整数N,N不超过10000位,并且N不包含前导0。
输出
对于每组输入,输出比N大的最小的那个回文数P。
输入样例 1
44 3 175
输出样例 1
55 4 181 字符模拟
#include <cstdio>
#include <cstring>
#define N 10001
char s[N];
using namespace std;
int main(){
while ( ~scanf("%s",s)){
int len=strlen(s);
int flag=0,i;
for(i=len/2-1;i>=0;--i){
if(s[i]>s[len-1-i]){flag=1;break;}
else if(s[i]<s[len-1-i]){ flag=-1;break;}
}
if(flag!=1){//前半串要加1
//s[(len-1)/2]++;
for(i=(len-1)/2;i>=0;--i){//199 191 999
s[i]++;
if(s[i]>'9'){
s[i]='0';
}else break;
}
if(s[0]=='0'){//999 9999
s[0]='1';
len++;
s[len/2]='0';
}
}
for(i=0;i<len/2;++i)
printf("%c",s[i]);
for(i=(len+1)/2-1;i>=0;--i)
printf("%c",s[i]);
printf("\n");
}
return 0;
}
本文地址:https://blog.csdn.net/qq_45748941/article/details/107348091