如何增加整数数组值?

时间:2015-09-15 23:00:53

标签: java arrays

我正在设计一个问题,我必须使用int数组来添加或减去值。例如,不是通过添加1将100更改为101,而是想使用int数组执行相同的操作。它的工作原理如下:

int[] val = new int[3];

val[0] = 1;
val[1] = 0;
val[2] = 0;

val[2] += 1;

所以,如果我必须得到101的值,我将为val [2]添加1。

我遇到的唯一问题是找到一种使int数组工作的方法,就像在普通整数数据集中加法和减法一样有效。

这是否可以使用for循环或while循环? 任何帮助将不胜感激!

5 个答案:

答案 0 :(得分:2)

这是你的作业:

public static int[] increment(int[] val) {
    for (int i = val.length - 1; i >= 0; i--) {
        if (++val[i] < 10)
            return val;
        val[i] = 0;
    }
    val = new int[val.length + 1];
    val[0] = 1;
    return val;
}

确保在将其作为自己的作品提交之前了解其工作原理和原因。

答案 1 :(得分:1)

使用String来设计此问题的解决方案 你可以参考这个方法,它将返回2个以字符串格式输入的总和。

  

输入字符串应仅包含数字。

class Demo {
public static String add(String a1, String b1) {
    int[] a = String_to_int_Array(a1);
    int[] b = String_to_int_Array(b1);
    int l = a.length - 1;
    int m = b.length - 1;
    int sum = 0;
    int carry = 0;
    int rem = 0;
    String temp = "";
    if (a.length > b.length) {
        while (m >= 0) {
            sum = a[l] + b[m] + carry;
            carry = sum / 10;
            rem = sum % 10;
            temp = rem + temp;
            m--;
            l--;
        }
        while (l >= 0) {
            sum = a[l] + carry;
            carry = sum / 10;
            rem = sum % 10;
            temp = rem + temp;
            l--;
        }
        if (carry > 0) {
            temp = carry + temp;
        }
    } else {
        while (l >= 0) {
            sum = a[l] + b[m] + carry;
            carry = sum / 10;
            rem = sum % 10;
            temp = rem + temp;
            m--;
            l--;
        }
        while (m >= 0) {
            sum = b[m] + carry;
            carry = sum / 10;
            rem = sum % 10;
            temp = rem + temp;
            m--;
        }
        if (carry > 0) {
            temp = carry + temp;
        }
    }
    return temp;

}

public static int[] String_to_int_Array(String s) {
    int arr[] = new int[s.length()], i;
    for (i = 0; i < s.length(); i++)
    arr[i] = Character.digit(s.charAt(i), 10);
    return arr;
}

public static void main(String a[]) {
    System.out.println(add("222", "111"));
}
}

答案 2 :(得分:1)

快速&amp;脏:

static void increment(int[] array){
    int i = array.length-1;
    do{
        array[i]=(array[i]+1)%10;
    }while(array[i--]==0 && i>=0);
}

请注意插入时的溢出,例如{9,9}。结果是{0,0}。

答案 3 :(得分:0)

enter image description here

public static void increment() {    
    int[] acc = {9,9,9,9};
    String s="";
    for (int i = 0; i < acc.length; i++)
        s += (acc[i] + "");
    int i = Integer.parseInt(s);
    i++;
    System.out.println("\n"+i);
    String temp = Integer.toString(i);
    int[] newGuess = new int[temp.length()];
    for (i = 0; i < temp.length(); i++)
    {
        newGuess[i] = temp.charAt(i) - '0';
    }

    printNumbers(newGuess);
}

public static void printNumbers(int[] input) {      
    for (int i = 0; i < input.length; i++) {
        System.out.print(input[i] + ", ");
    }
    System.out.println("\n");
}

答案 4 :(得分:0)

如果有人正在使用 JavaScript 寻找此解决方案,或者您可以将其转换为 Java,那么这是您的最佳解决方案:

function incrementArr(arr) {
  let toBeIncrementedFlag = 1,   // carry over logic
    i = arr.length - 1;
  while (toBeIncrementedFlag) {
    if (arr[i] === 9) {
      arr[i] = 0;    // setting the digit as 0 and using carry over
      toBeIncrementedFlag = 1;
    } else {
      toBeIncrementedFlag = 0;
      arr[i] += 1;
      break;    // Breaking loop once no carry over is left
    }
    if (i === 0) {    // handling case of [9,9] [9,9,9] and so on
      arr.unshift(1);
      break;
    }
    i--;    // going left to right because of carry over
  }

  return arr;
}