如果小数组中的表示在小数系统中的表示是相同的,则称为palindrome。对于给定的不超过1000000位数字的正整数k,将大于k的最小腔室的值写入输出。数字总是在没有领先零的情况下显示。
import java.util.Scanner;
class next{
public static void main(String ags[])
{
Scanner in = new Scanner(System.in);
int n=in.nextInt();
for(int i=0;i<n;i++)
{
String s = in.next();
if(s.length()%2==0)
{
int p = s.length()/2;
String sub = s.substring(0,p);
String sub2= s.substring(p,s.length());
String reverse = new StringBuffer(sub).reverse().toString();
int t = Integer.parseInt(reverse);
int t1= Integer.parseInt(sub2);
if(t>t1)
{
System.out.println(sub+reverse);
}
else
{
int t2 = Integer.parseInt(sub)+1;
String s2 = Integer.toString(t2);
String rev = new StringBuffer(s2).reverse().toString();
System.out.println(s2+rev);
}
}
else
{
int len = s.length()/2;
String se1 = s.substring(0,len);
String se2 = s.substring(len+1,s.length());
String reverse = new StringBuffer(se1).reverse().toString();
int t = Integer.parseInt(reverse);
int t1= Integer.parseInt(se2);
if(t>t1)
{
String se = s.substring(0,len+1);
System.out.println(se+reverse);
}
else
{
String temp = s.substring(0,len+1);
int tn = Integer.parseInt(temp);
tn++;
String left = Integer.toString(tn);
String grip = left.substring(0,left.length()-1);
String reve = new StringBuffer(grip).reverse().toString();
System.out.println(left+reve);
}
}
}
}
}
我是编程的初学者。我正在尝试在SPOJ上解决这个问题#palin,但是即使它在IDEONE上工作,我也会遇到运行时错误。请帮助我
您的代码存在一些问题,但最大的是您在字符串上调用Integer.parseInt
,该字符串可以在int
的范围内表示值 far 。说明说,输入可以高达一百万位,这意味着您在高达50万个数字的字符串上调用Integer.parseInt
&mdash;意思是,最多10 500000 &minus; 1&mdash;但是 int
s只能达到2 31 &minus; 1,小于10 10 。
修复了此操作后,您可以通过以下内容来测试代码:
- 将实际将结果计算成自己的方法的逻辑删除,并具有诸如
String computeNextPalindrome(String s)
之类的签名。这样,您可以通过编程调用并检查结果来测试该方法,而不是弄乱标准输出。 - 编写一种将
expectedResult
初始化为computeNextPalindrome("99999")
(即"100001"
(结果的方法,然后从99999
向下迭代到1
,验证computeNextPalindrome
始终返回expectedResult
。每次验证后,检查当前号是否为palindrome,如果是这样,请将expectedResult
更新为当前号码。
这样,您可以详尽地测试您的逻辑对所有最多五位数字的数字都是正确的。除了我上面提到的错误外,还要尝试使用int
以远远超出int
的范围之外,大多数错误将出现在某些小情况下。一个只会影响大价值的错误是非常不寻常的。因此,通过详尽的测试小值,您几乎可以找到所有错误。
然后,您可以通过点测试一些大值(例如"1234567890123456789012345678901234568790"
((应该给出"1234567890123456789119876543210987654321"
(。