2015-10-26 71 views
-1

我必须使用一个静态方法TotalAverage(int n)来计算数字0 + 1 + 2 + .... + n的平均数字总数。因此总平均数(19)将被计算为(0 + 1 + ... + 9 + 1 + ... + 10)/ 20.0。我设法做它用下面的代码大部分:给定整数的平均数字总和是多少?

public static double TotalAverage(int n) { 
    double total = 0; 
    int count = 0; 
    while (n >= 0) { 
     total += n % 10; 
     n = n - 1; 
     count++; 
    } 
    return total/count; 
} 

它适用于人数达到9,但我得到了更大的数字不正确的结果。我意识到,一旦while语句达到10%10,它将总数增加0而不是10,但我无法弄清楚如何正确执行。

+4

提示:从0到n的值之和等于(n^2 + n)/ 2。这消除了循环的需要。 – Makoto

+0

问题是我不需要计算19 + 18 + 17 + 16 + ... + 0,但是以问题中所包含的方式。 – jack

+0

@jack从您的描述中不清楚应该发生什么,也许你应该添加一个更大数字的细节,如:totalAverage(33) – dan

回答

0

您可以使用单独的方法来进行数字总和。像这样的东西会奏效。

private static int digitSum(int a) { 
    return a < 10 ? a : a%10 + digitSum(a/10); 
} 

然后你就可以用

total += digitSum(n); 
+0

谢谢你,完美的工作。 – jack

+0

没问题。很高兴我能帮上忙。 –

1

如果你正在寻找,总结了一些所有的数字代替线

total += n % 10 

然后在你的代码中的错误是

total += n % 10; 

哪些只能得到个位数从n。使用一些循环从n获取所有数字而不修改它(因为如果您修改n,您的外部循环将会中断)。尝试:

int temp = n; 
while(temp>0) { 
    total += temp % 10; //add next digit 
    temp /= 10; 
}