1. 程式人生 > >洛谷——P1609 最小回文數

洛谷——P1609 最小回文數

圖片 pac i++ 模擬 algorithm ring print 技術 ide

題目描述

回文數是從左向右讀和從右向左讀結果一樣的數字串。

例如: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 最小回文數