码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷——P1609 最小回文数

时间:2017-11-27 00:09:04      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:输入格式   -o   100%   pac   数值   i++   hid   sample   说明   

题目描述

回文数是从左向右读和从右向左读结果一样的数字串。

例如:121、44 和3是回文数,175和36不是。

对于一个给定的N,请你寻找一个回文数P,满足P>N。

满足这样条件的回文数很多,你的任务是输出其中最小的一个。

输入输出格式

输入格式:

 

1行,一个正整数N。N的数值小于10^100,并且N没有前导0。

 

输出格式:

 

你的程序应该输出一行,最小的回文数P(P>N)。

 

输入输出样例

输入样例#1: 复制
44
输出样例#1: 复制
55

说明

50%的数据,N<10^9

100%的数据,N<10^100

 

40分模拟

技术分享图片
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 110
using namespace std;
char ch[N];int l;
int main()
{
    cin>>ch+1;ch[0]=0;
    l=strlen(ch+1);
    if(l%2==0)
    {
        for(int i=l/2;i>=1;i--)
        {
            if(ch[i]>9) 
             ch[i-1]+=(ch[i]-0)/10,ch[i]=(ch[i]-0)%10+0;
            else 
            {
                if(ch[i]==9) ch[i]=0,ch[i-1]+=1;
                else break;
            }
        }
        if(ch[0]!=0)
        {
            for(int i=1;i<=l+1;i++)
             printf("1");
            return 0;
        }
        for(int i=1;i<=l/2;i++)
         printf("%c",ch[i]);
        for(int i=l/2;i>=1;i--)
         printf("%c",ch[i]);
    }
    else
    {
        if(ch[l/2+1]!=9) ch[l/2+1]+=1;
        else
        {
            ch[l/2+1]=0;ch[l/2]+=1;
            for(int i=l/2;i>=1;i--)
            {
                if(ch[i]>9) 
                 ch[i-1]+=(ch[i]-0)/10,ch[i]=(ch[i]-0)%10+0;
                else break;
            }
        }
        if(ch[0]!=0)
        {
            for(int i=1;i<=l+1;i++)
             printf("1");
            return 0;
        }
        for(int i=1;i<=l/2;i++)
         printf("%c",ch[i]);
        printf("%c",ch[l/2+1]);
        for(int i=l/2;i>=1;i--)
         printf("%c",ch[i]);
    }
    return  0;
}
40分模拟

 

题解

技术分享图片
var
  s,s1:string;
  i,len:longint;
begin
  readln(s);
  len:=length(s);
  s1:=s;
  for i:=1 to len div 2 do
    s1[len-i+1]:=s[i];
  if s1>s then begin write(s1); halt; end;
  i:=(len+1) div 2;
  while (s[i]=9) and (i>0) do dec(i);
  if i=0 then begin write(1); for i:=1 to len-1 do write(0); write(1); halt; end
         else begin inc(s[i]); for i:=i+1 to (len+1) div 2 do s[i]:=0; end;
  for i:=1 to len div 2 do
    s[len-i+1]:=s[i];
  write(s);
end.
View Code

 

洛谷——P1609 最小回文数

标签:输入格式   -o   100%   pac   数值   i++   hid   sample   说明   

原文地址:http://www.cnblogs.com/z360/p/7900772.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!