【问题标题】:I am solving PALIN on spoj ,but I am getting NZEC error even though it is working on ideone我正在解决 spoj 上的 PALIN 问题,但我收到 NZEC 错误,即使它正在处理 ideone
【发布时间】:2017-06-22 10:55:45
【问题描述】:

如果一个正整数在十进制系统中从左到右和从右到左读取时的表示相同,则称为回文。对于给定的不超过 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);

            }





    }

    }

   }

  }

我是编程初学者。我正在尝试解决这个问题 #PALIN on spoj ,但即使它正在 ideone 上运行,我也会遇到运行时错误。请帮助我

【问题讨论】:

  • 请描述问题,尝试在问题中添加更多细节。

标签: java adhoc


【解决方案1】:

您的代码存在一些问题,但最大的问题是您在可以表示超出int 范围的值 的字符串上调用Integer.parseInt。说明说输入最多可以是一百万位,这意味着您在最多一百万位的字符串上调用Integer.parseInt - 意思是最多10500000的字符串 - 1 — 但ints 仅上升到 231-1,小于 1010

修复该问题后,您可以通过执行以下操作来测试您的代码:

  • 将实际计算结果的逻辑分解到它自己的方法中,签名类似于String computeNextPalindrome(String s)。这样,您就可以通过以编程方式调用该方法并检查其结果来测试该方法,而不是乱用标准输出。
  • 编写一个方法,将expectedResult初始化为computeNextPalindrome("99999")的预期结果(即"100001"),然后从99999向下迭代到1,验证computeNextPalindrome总是返回expectedResult。每次验证后,检查当前号码是否为回文,如果是,则将expectedResult更新为当前号码。

这样,您可以详尽地测试您的逻辑对于最多五位数的所有数字是否正确。除了我上面提到的错误,关于尝试将int 用于远远超出int 范围的值,大多数错误将出现在一些小情况下。有一个只影响大值的错误是相当不寻常的。因此,通过对小值进行详尽的测试,您可以发现几乎所有的错误。

然后,您可以通过对一些大值(例如"1234567890123456789012345678901234568790"(应该给出"1234567890123456789119876543210987654321")进行现场测试来检查特定于大值的错误。

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    相关资源
    最近更新 更多