增加了30多个数字

时间:2014-11-02 09:24:39

标签: java

我在java中执行这个项目,它接受两个整数值(最多30个数字)并将它们加在一起。由于我不允许使用Big Integer或其他类,我想把它们作为字符串然后将它们转换为整数。这是我到目前为止所做的:

import java.util.*;
public class Test{
    public static void  main(String[] args){

    System.out.print("Input 1: ");
    char[] firstInteger = myInput();
    System.out.print("Input 2: ");  
    char[] secondInteger = myInput();

    int[] num1 = char2Integer(firstInteger);
    int[] num2 = char2Integer(secondInteger);
    sum(num1, num2);
    }
    public static char[] myInput(){
        String numbers;
        Scanner input = new Scanner(System.in);
        numbers = input.nextLine();

        while(numbers.length() > 30){
            System.out.println("Please input valid integers with digits less than 30");
            numbers = input.nextLine();
        }return numbers.toCharArray();
    }
    public static int[] char2Integer(char[] integer){
        int[] numbers = new int[integer.length+1];
        int j=integer.length-1;

        for (int i = numbers.length-1; i>0 ; i--){
            if(j>-1){
                numbers[i] = (int)(integer[j]-'0');
                j--;
            }
        }return numbers;
    }
    public static void sum(int[] num1, int[] num2){
        int[] sum = new int[num1.length];

        for (int i = sum.length-1 ; i> 0; i--){
            sum[i] += num1[i]+num2[i];

            if(sum[i] >= 10){
                sum[i] = sum[i]%10;
                sum[i-1]++;
            }
        }
        for (int i = 0; i< sum.length; i++)
            System.out.print(sum[i]);
    }
}

我现在的问题是:当添加不同长度的数组时,我会得到奇怪的答案。 (添加相同长度的数组工作正常。) 例如:

input 1 = 50
input 2 = 500
output = 100

input 1 = 50
input 2 = 5
output = java.lang.ArrayIndexOutOfBoundsException: 2

我尝试将数组反转然后添加它们,但是我得到一个outOfBoundsException:-1。 我还想过将较短的数组转换为与较长的数组相同的长度,但这会在我的代码中占用很多行。谢谢您的帮助。我将采取所有积极/消极的建议。

4 个答案:

答案 0 :(得分:2)

检查此代码的和函数。

public static void sum(int[] num1, int[] num2){
    int num1len = num1.length;
    int num2len = num2.length;

    int[] sum= new int[num1len>num2len?num1len:num2len];

    for (int i = sum.length-1 ; i> 0; i--){
        if(num1len>0)
            sum[i] += num1[--num1len];

        if(num2len>0)
            sum[i] += num2[--num2len];

        if(sum[i] >= 10){
            sum[i] = sum[i]%10;
            sum[i-1]++;
        }
    }
    for (int i = 0; i< sum.length; i++)
        System.out.print(sum[i]);
}

答案 1 :(得分:0)

将缩短的数字用0填充,使其长度与较长的数字相同。

e.g。

input 1 = 50
input 2 = 5

应解释为50 + 05

答案 2 :(得分:0)

是的,因为这行

 sum[i] += num1[i]+num2[i];

如果其中一个数组的长度比另一个长,那么你处理它们总是具有相同的长度

答案 3 :(得分:0)

你的问题是总和方法,你没有考虑两个输入的长度,甚至lsb数字1总结为数字2的lsb:

  public static void sum(int[] num1, int[] num2){
      int[] sum = new int[num1.length > num2.length ? num1.length : num2.length];//allocate for whoever is having more number of characters in input.

      for (int i = num1.length-1, j = num2.length - 1, k = sum.length - 1 ; i> 0 || j > 0; i--, j--, k--){//take three variables one for each
          sum[k] += num1[i]+num2[j];

          if(sum[k] >= 10){
              sum[k] = sum[k]%10;
              sum[k-1]++;
          }
      }
      for (int i = 0; i< sum.length; i++)
          System.out.print(sum[i]);
  }