下面的代码在打印输出为大值后给出运行时错误,但是如果我使用小值则其工作正常。在此代码中,我们需要找到下一个最小的回文。 例如9999给出输出10001,它是正确的,没有运行时错误但是 999999999999999999999999999999给出了正确的输出但是在获得输出代码块后显示ran26.cpp停止工作,并且在ideone中它在打印输出后给出了运行时错误。
#include<iostream>
#include<string>
#include<ctype.h>
#include<algorithm>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int carry=1,flag=0,flag2=0;
string str,str2;
cin>>str;
int len=str.size();
while(1)
{
int ch[len];
flag=0;flag2=0;
carry=1;
for(int i=0;i<len;i++)
ch[i]=str[i]-'0';
for(int i=len-1;i>=0;i--)
{
int x=ch[i];
ch[i]=(x+carry)%10;
carry=(x+carry)/10;
}
while(carry>0)
{
ch[len]=carry%10;
len++;
carry=carry/10;
flag=1;
}
if(flag==1)
{
int start=0,end=len-1,temp1;
while (start < end)
{
temp1 = ch[start];
ch[start] = ch[end];
ch[end] = temp1;
start++;
end--;
}
}
for(int i=0;i<len;i++)
{
str[i]=ch[i]+'0';
str2[len-1-i]=ch[i]+'0';
}
for(int i=0;i<len;i++)
{
if(str[i]!=str2[i])
flag2=1;
}
if(flag2==0)
{
for(int i=0;i<len;i++)
cout<<str[i];
cout<<endl;
break;
}
}
}
return 0;
}
提前致谢。