-1

我正在编写一个程序,它将添加 2 个长度为 40 个元素的数组。我必须将 add() 方法保留为 HugeInteger(不能将其更改为整数),因此当我尝试返回 2 个整数的总和时,它会给我“HugeInteger@77e1ee5d”。有人可以让我知道这意味着什么,并告诉我如何解决它。谢谢

公共类 HugeInteger {

private int[] integer ;

public HugeInteger(int num[]){
    integer =new int [40];

    for(int x=1; x<=39; x++){           
        integer[x]= num[x];
    }

}

public void parse(String s){

    for(int i=0; i<=s.length(); i++){

        integer[i]=Integer.parseInt(s.substring(i,i+1));
    }

}

public HugeInteger add(HugeInteger a1){
    HugeInteger sum = new HugeInteger(integer);

    int cary=0;
      for (int i=39; i>=0; i--){
          sum.integer[i]=integer[i]+a1.integer[i]+cary;
          if(sum.integer[i]>=10){
              cary=1;
              sum.integer[i]-=10;
          }else{
              cary=0;
          }
      }
      return sum;   
}}

//这是我的测试程序

public class HugeIntegerTest {

public static void main(String[] args) {


    int []num={1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

    HugeInteger hi= new HugeInteger(num);



    System.out.println("Addition: "+hi.add(hi));


}

}

4

2 回答 2

2

您必须编写自己的toString()for版本HugeInteger才能正确显示。

于 2013-09-01T18:10:08.117 回答
2

这是默认Object.toString()方法的输出。您需要自己重写toString并提供更好的实现。一个例子:

@Override
public String toString() {
    StringBuilder builder = new StringBuilder(integer.length);
    for(int digit : integer) {
        builder.append(digit);
    }
    return builder.toString();
}

请注意,此实现不会修剪前导零,即它将打印“0000...000123”而不仅仅是“123”。这留给读者、erm、程序员作为练习。;-)

另一个提示:在你的构造函数中,你的循环应该从i=0. 否则,最高有效数字 ( integer[0]) 将始终为零,例如,您的测试程序会给您一个 HugeInteger 代表 0 而不是 10 39

于 2013-09-01T18:10:13.117 回答