如何迭代计算数字中的数字总和-Java / BlueJ

时间:2019-05-06 18:24:34

标签: iteration bluej sum-of-digits

我正在创建两种方法-一种递归地计算数字中的数字之和,另一种迭代地。

我已经创建了递归方法,并且在大多数情况下,我了解查找数字总和的概念,但是我不确定如何正确地将其放入迭代方法中。我的代码没有给我正确的输出。

  public static int iterativeDigitSum(long n) {
        if(n < 0){ 
           String err = "n must be positive. n = " + n;
         throw new IllegalArgumentException(err);
       }
     if(n == 0){
           return 0;
       }

        long sum = 0;
        long i = 0;
     while(n > 0){
             i = n % 10;
             sum = sum + n;
             n = n / 10;
       }
       int inSum = (int)sum;
       return inSum;
}

数字“ n”为10,表示预期输出为1。我得到11。请您向我解释我做错了什么,以及可能如何解决?非常感谢。

1 个答案:

答案 0 :(得分:0)

该算法基本上包括三个步骤:

  1. 获取数字的最右侧数字。由于数字中的每个数字根据其位置都有单位,数十,数百,数千个等的排名,因此最右边的数字是将数字除以10的余数

    digit = n % 10

  2. 对数字求和:

    sum += digit

  3. 将数字除以10,将所有数字向右移一位。数字变小10倍:

    n = n / 10

    有效地,这将“提供”步骤1的下一个最右边的数字。

重复上述三个步骤,直到number的值变为零为止。

通过在代码中添加一些“调试”信息,您可以使自己形象地解释上述解释:

public static int iterativeDigitSum(long n)
{
    long sum = 0;
    int i = 1;
    System.out.println("i\tn\tdigit\tsum");        
    while(n > 0) {
        long digit = n % 10;
        sum += digit;            
        System.out.println(i + "\t" + n + "\t" + digit + "\t" + sum);
        n = n / 10;
        i++;
    }
    System.out.println("\t" + n + "\t\t" + sum);
    return (int)sum;
}

请注意,i变量用于计数循环迭代,而digit变量在每次迭代中保留数字的最右位数。

鉴于数字10,BlueJ控制台的输出为:

i   n     digit   sum
1   10    0       0
2   1     1       1
    0             1

以及数字2019:

i   n       digit   sum
1   2019    9       9
2   201     1       10
3   20      0       10
4   2       2       12
    0               12

希望有帮助。