求解两个较大的数,有两个数组存放两个较大的数(一个数组位Array[]只存储一个整数),求两个数组的和。为何我的程序输出为零,求解释。。
package mid.autumn;public class BigCal {    public int[] cal(int[] x, int[] y) {
        int[] z = new int[Math.max(x.length, y.length)];
        int m = x.length - 1;
        int n = y.length - 1;
        int flag = 0;
        int k = z.length - 1;
        for (int i = z.length - 1; m == 0 || n == 0; i--) {
            if (flag == 0) {
                z[i] = x[m] + y[n];
            } else if (flag == 1) {
                z[i] = x[m] + y[n] + 1;
                flag = 0;
            }
            if (z[i] >= 10) {
                z[i] = z[i] % 10;
                flag = 1;
            }
            m--;
            n--;
            k = i;
        }
        if (m == 0) {
            for (k = k - 1; k >= 0; k--) {
                if (flag == 0) {
                    z[k] = y[n];
                } else {
                    z[k] = y[n] + 1;
                    flag = 0;
                }
                if (z[k] >= 10) {
                    z[k] = z[k] % 10;
                    flag = 1;
                }
                n--;
            }
        }
        if (n == 0) {
            for (k = k - 1; k >= 0; k--) {
                if (flag == 0) {
                    z[k] = x[m];
                } else {
                    z[k] = x[m] + 1;
                    flag = 0;
                }
                if (z[k] >= 10) {
                    z[k] = z[k] % 10;
                    flag = 1;
                }
                m--;
            }
        }
        return z;
    }
}下面是主类,package mid.autumn;/**
 *
 * @author Administrator
 */
public class main {    public static void main(String[] args) {
        BigCal b = new BigCal();
        int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        int[] y = {2, 5, 9, 7, 6};
        int[] p = b.cal(x, y);
        for (int t : p) {
            System.out.println(t);
        }
    }
}

解决方案 »

  1.   

    规则的话,一个数组位Array[]只能存储0-9的整数。大于9的向前进一位喽。将两数之和求出来然后输出。
      

  2.   

    java中实现两个大整数相加不需要两个数组
    有一种简单有效的方法是使用BigInteger
    请参见大师们的杰作:
    http://topic.csdn.net/u/20070711/17/1c526e7c-85f7-494c-9c98-5754029bcfe4.html
      

  3.   

    你不要以为数组的效率要高
    不像C语言,java中的数组是一个对象
    请使用BigInteger实现大整数相加
      

  4.   

    一int型的数据可以20亿的数据,如果超过20亿的话,可以biginteger的数据类型/long型来处理。如果不喜欢用biginteger的话,也可以自己用string结合数组来处理。一位biginteger的原理就是用string和数组来做的!其他应该没什么大的问题!中间就是逻辑问题了!自己理清思路再做!问题不大!
      

  5.   

    如果是浮点型数据相除的话只能用biginteger类型处理!
      

  6.   

     m == 0 || n == 0;改成m!=0&&n!=0
      

  7.   

    for (int i = z.length - 1; m == 0 || n == 0; i--) 有问题。中间的布尔表达式为 false 的话,不执行循环语句。所以你的这个,循环体应该是没有运行的。