2015-10-26 51 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; 
}