设计巨大的整数类

时间:2012-03-27 18:02:45

标签: java

我正在设计一个名为HugeInteger的类 - 它使用40个元素数组来存储整数。我提供了一个名为parse的方法,它接收一个String,提取每个数字,如下面的代码片段所示。我也提供方法添加它接收类HugeInteger的对象来进行添加。 为添加提供的方法没有按照提议的方式工作,如果您可以帮助我解决方案,我希望您。 P.S我注意到之前提出过一些类似的问题,但它对我没有帮助。

private int [] integerDigits = new int[SIZE];

//constructor that enables an object of class to be initialised when it is declared
    public HugeInteger(String stringOfIntegers)
    {
        setOfIntegers = stringOfIntegers;
    }//end of constructor

private int[] parseFunction (String str)
    {
        for (int i = 0; i < str.length(); i++)
        {
            char ch = str.charAt(i);
            if (Character.isDigit(ch))
                integerDigits[i] = Character.getNumericValue(ch);
            else
                    integerDigits[i] = 0;
        }   
                return integerDigits;
        }//end of method parseFunction

    public HugeInteger addFunction(HugeInteger number)
        {
            parseFunction(setOfIntegers);
            return new HugeInteger(setOfIntegers +number.parseFunction(setOfIntegers));
        }//end of method addFunction

1 个答案:

答案 0 :(得分:1)

错误在于此行:

return new HugeInteger(setOfIntegers +number.parseFunction(setOfIntegers));

因为setOfIntegers是一个String,所以+符号并不意味着它们的加法而是连接(将它们背靠背写入)。因此,当添加5和6时,您将获得56而不是11。 您不需要调用构造函数,而是需要像在纸上一样从后面到前面实现添加,使用变量来保存进位号。

示例:

    99
+   11
     0 carry 1
    10 carry 1
=  110

此外,因为你总是使用40位数字而你从数组的前面开始,你的问题无法知道这些数字真正属于这个数字的多少,所以它无法区分“5”, “500”,“5000”等。这是一个问题,因为parseFunction(5)= parseFunction(50)= {5,0,0,0,...,0}(总共39个零),问题无法知道如何对齐数字。向下循环会更好(“integerDigits [40-i] = Character.getNumericValue(ch);”)因为那时“5”将变为0000 .... 05而“50”将变为000050。

另一个小错误是

number.parseFunction(setOfIntegers)

应该是

number.parseFunction(number.setOfIntegers)