题目名字
最小回文数
题目链接
题意
给一个数,找出比他大的最小回文数;
思路
- 先判断是不是回文数,不是的话先变成回文数;(还要设置一个的专门处理类似特殊9999的)
- 数中数字是9的换成1其他的数字都加一
坑点
- 9999比较特殊
算法一:
代码
#include<iostream>
#include<cstring>
using namespace std;
int main(){
char s[105],ans[105];
cin>>s;
int len=strlen(s);
//特判999
for(int i=0;i<len&&s[i]=='9';i++){
if(i==len-1){
s[0]='1';
len++;
for(int i=0;i<len;i++){
s[i]=='0';
}
}
}
//变成回文数
for(int i=0;i<len-i;i++){
ans[i]=ans[len/2-1]=s[i];
}
while(strcmp(ans,s)<=0){//当s<ans时;
int p=(len+1)/2-1;
while(ans[p--]=='1')
p++;
ans[p]=ans[len-p-1]=ans[p]+1;
for(p <=len-p-1;p++){
ans[p]=ans[len-p-1]='0';
}
}
cout<<ans;
return 0;
}