【发布时间】:2016-01-31 19:54:18
【问题描述】:
给定一个数字,我试图找到大于给定数字的最小回文数。这是我的代码:
#include<bits/stdc++.h>
using namespace std;
char a[1000005];
int main(){
int t,len,ni,nj,nk,i,j,k;
cin>>t;
while(t--){
cin>>a;
char ch=getchar();
len=strlen(a);
k=len-1;
for(i=0;i<len;i++){
if(a[i]!='9'){
break;
}
}
if(i==len){ //if all digits are 9
for(i=len-1;i>0;i--){
a[i]='0';
}
a[0]='1';
a[len]='1';
a[len+1]='\0';
}
else{
for(i=0;i<len/2;i++){
if(a[i]!=a[len-1-i]){ //check if number is already palindrome
break;
}
}
if(i==len/2){ //add 1 if it is already palindrome
j=len-1;
while(1){
nj=((int)a[j])-48;
nj++;
if(nj<10){
a[j]=nj+48;
break;
}
else{
a[j]=48;
j--;
}
}
}
for(i=0;i<len/2;i++){
if(a[i]==a[k]){ //compare first with last,second with second last...
k--;
}
else{
nk=((int)a[k])-48;
ni=((int)a[i])-48;
if(nk<ni){
a[k]=ni+48;
}
else{
j=k; a[j]=ni+48; j--;
while(1){
nj=((int)a[j])-48;
nj++;
if(nj<10){
a[j]=nj+48;
break;
}
else{
a[j]=48;
j--;
}
}
if(j<=i){
i=j-1;
k=len-j;
}
}
k--;
}
}
if(len%2==0){
a[len/2]=a[len/2-1];
}
}
cout<<a<<endl;
}
return 0;
}
我的代码对于我尝试过的所有输入都运行良好,但它没有被接受。我的代码对吗?
【问题讨论】:
-
这么简单的任务有很多代码,您很可能应该考虑另一种方法。并且不要包含
stdc++(stackoverflow.com/questions/31816095/…)。实际上,如果它有效,这甚至可能是它不被接受的原因。更有意义的变量名会让这更容易理解。 -
请给法官链接好吗?
-
法官给出的结果是什么?
-
是 WA 还是任何其他(运行时)错误?
-
它显示的是 WA。问题是spoj.com/problems/PALIN
标签: c++ algorithm palindrome