将值添加到列表并转换为BigInteger-Java

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

我正在编写一个代码,该代码确定最小的整数,该整数是由7组成的序列,后跟一些可以被int n整除的零(可能是零)。例如0, 7, 777, 7700, 777770, 70000000。由于此数字可能很大,因此返回值应为BigInteger

到目前为止,我的代码有一个if-else阶梯,它涵盖了以下情况:如果int n不能被2或5整除,则保证仅包含7(无零)。在int n不能被二或五整除的情况下,我的思维过程是在while循环中继续将七个添加到LinkedList中,直到该列表(转换为BigInteger)被int n整除。对于int n可被二或五整除的情况,使用相同的逻辑,除了两个for循环会在列表中添加七和零。

我的代码在将列表转换为字符串然后转换为BigInteger时遇到了运行时错误,特别是在BigInteger numBig = new BigInteger(str);行上。错误是:“ java.lang.NumberFormatException:零长度BigInteger(在java.math.BigInteger中)”另外,对于int n可被二或五整除的情况,我不太确定逻辑是否正确。 >

到目前为止,这是我的代码:

    public static BigInteger method(int n)
    {
        LinkedList<Integer> res = new LinkedList<Integer>();

        BigInteger num = BigInteger.valueOf(n);
        BigInteger two = new BigInteger("2");
        BigInteger five = new BigInteger("5");

        String temp = Integer.toString(n);
        int size = temp.length();

        if (n == 0)
        {
            return BigInteger.valueOf(0);
        }
        if (num.remainder(two).equals(BigInteger.ZERO) == true || 
        num.remainder(five).equals(BigInteger.ZERO) == true)
        {
            while (convert(res).remainder(num).equals(BigInteger.ZERO) == false)
            {
                for (int i = 0; i > size; i++)
                {
                    res.add(7);
                    for (int j = 0; j > size; j++)
                    {
                        res.add(0);
                    }
                }
            }   
        }
        else
        {
            while (convert(res).remainder(num).equals(BigInteger.ZERO) == false)
            {
                res.add(7);           
            }
            return convert(res);
        }
        return convert(res);
    }
    private static BigInteger convert(List<Integer> res)
    {
        String str = new String();
        for (int i : res)
        {
            str = str + i;
        }
        BigInteger numBig = new BigInteger(str);
        return numBig;
    }

我正在编写一个代码,该代码确定最小的整数,该整数是由7组成的序列,后跟一些可以被int n整除的零(可能是零)。例如0,7,777,7700,777770,70000000。...

java if-statement while-loop linked-list biginteger
1个回答
0
投票

“零长度BigInteger”表示您正在尝试从长度为0的对象创建BigInteger。堆栈跟踪会告诉您确切在哪一行。

© www.soinside.com 2019 - 2024. All rights reserved.