不知道如何修复 long.tostring 失败

问题描述 投票:0回答:2

` 我正在做一个问题,我们应该编写一个读取正整数序列的程序。第一个零终止输入。对于每个输入 N,程序计算最小的基数 B(其中 B≥2),这样当用基数 B 编写时 N 是回文基数。我的代码对于最低的回文基数来说很好,但当我使用更大的数字得到更高的基数时, .ToString 方法没有将我的长整型正确添加到字符串中。它只是添加随机字母和数字。

import java.util.Arrays;
import java.util.Scanner;

public class num5 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String nums[] = in.nextLine().split(" ");
        for (int i = 0; i < nums.length - 1; i++) {
            if (nums[i].equals("0")) {
                System.exit(0);
            }
            System.out.println(bases(nums[i]));
        }

        for (String var : nums) {
            System.out.println(var);
        }
    }

    public static boolean ispalin(String original) {

        String reverse = "";

        int length = original.length();
        for (int k = (length - 1); k >= 0; k--)
            reverse = reverse + original.charAt(k);
        if (original.equals(reverse))
            return true;
        else
            return false;
    }

    public static int bases(String numb) {
        for (int i = 2; i < Integer.MAX_VALUE; i++) {
            String basecheck = "";
            basecheck = Long.toString(Long.parseLong(numb), i);
            if (ispalin(basecheck)) {
                return i;
            }
        }
        return 0;
    }

}

有什么办法可以解决这个问题吗?

java tostring long-integer
2个回答
0
投票

要表示给定基数 n 中的数字,您必须有 n 不同的符号。

可能的碱基范围是有限的,并且肯定不会达到

Integer.MAX_VALUE
。实际限制在
Character.MAX_RADIX
中给出,其值为
36
。这就是您应该使用的而不是
Integer.MAX_VALUE

public static int bases(String numb) {
    for (int i = 2; i < Character.MAX_RADIX; i++) {
        String basecheck = "";
        basecheck = Long.toString(Long.parseLong(numb), i);
        ...

0
投票
public static int base(String num) {
    BigInteger b = new BigInteger(num);
    BigInteger max = b.divide(BigInteger.TWO);

    for (int i = 2; BigInteger.valueOf(i).compareTo(max) <= 0; i++)
        if (isPalindrome(b.toString(i)))
            return i;

    return 0;
}

private static boolean isPalindrome(String str) {
    for (int i = 0, j = str.length() - 1; i < j; i++, j--)
        if (str.charAt(i) != str.charAt(j))
            return false;

    return true;
}
© www.soinside.com 2019 - 2024. All rights reserved.