我正在使用SPOJ解决Palin,但是即使它在Ideone上工作,我也会遇到NZEC错误



如果小数组中的表示在小数系统中的表示是相同的,则称为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"(。

相关内容

最新更新