洛谷——P1609 最小回文数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷——P1609 最小回文数相关的知识,希望对你有一定的参考价值。
题目描述
回文数是从左向右读和从右向左读结果一样的数字串。
例如:121、44 和3是回文数,175和36不是。
对于一个给定的N,请你寻找一个回文数P,满足P>N。
满足这样条件的回文数很多,你的任务是输出其中最小的一个。
输入输出格式
输入格式:
1行,一个正整数N。N的数值小于10^100,并且N没有前导0。
输出格式:
你的程序应该输出一行,最小的回文数P(P>N)。
输入输出样例
说明
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; }
题解
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.
以上是关于洛谷——P1609 最小回文数的主要内容,如果未能解决你的问题,请参考以下文章
洛谷 P1207 [USACO1.2]双重回文数 Dual Palindromes