欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

问题1020:最小回文数

程序员文章站 2022-03-27 21:29:03
最小的回文数描述回文数是从前往后和从后往前得到的数是相同的。现给你一个正整数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