2015-10-27 44 views
15

給出兩個數n1和n2,使得n2> n1,找到從n1到n2(包括n1和n2)的所有數的平方和。編寫一個程序來查找給定以下條件的所有數字的平方和?

我的方法:

我試圖使用從n1迭代循環來n2來解決這個問題,但我得到錯誤的答案

下面是我的代碼功能:

public int computeSumofSquares (int n1, int n2) 
{ 
    int sum=0; 
    if(n2>n1) 
    { 
     for(int i=n1;i<=n2;i++) 
     { 
      sum=((sum)+(n1*n1)); 
     } 
    } 
    return sum; 
    //write your code here 

} 

對於輸入

Parameters Actual Output Expected Output 
'8' '10' 192    245 
+12

提示:在你的循環中,你沒有使用'i'。 – Tunaki

+20

參見。現在,這是提出作業問題的正確方法。清晰簡潔的問題,預期輸出,實際輸出和嘗試的代碼。 OP,謝謝你讓我的一天。 +1 –

+7

另外,從1到n(包括)的平方和是「n *(n + 1)*(2n + 1)/ 6''。只是說。 – Abstraction

回答

16

您在每次迭代時平方n1。相反,你應該廣場i。作爲sum=((sum)+(i*i));的簡寫形式,您可以編寫sum += i * i;

+2

它比'sum =((sum)+(i * i))'更具可讀性,並且不需要這些括號 –

8

sum=((sum)+(n1*n1));更改爲sum=((sum)+(i*i));i爲值遞增。

5

在你的循環的每一次變化,但在你的發言sum=((sum)+(n1*n1));沒什麼變化,並在你的榜樣,每次你總結8^2,其結果將是8 * 8 + 8 * 8 + 8 * 8 = 192 。

正如大家所說,如果你改變 N1在該聲明中,像sum=sum+i*i,那麼你會得到你想要的結果。

+0

謝謝您也顯示方程的中間形式。通過代碼進行調試也會顯示出這種情況。 – Bae

4

正如其他人已經指出的那樣,您總是使用區間n1的下限來計算sum(而不是您的循環變量i)。

爲了完整起見,我張貼java8解決方案:

int n1 = 8; 
int n2 = 10; 
int sumOfSquares = IntStream.rangeClosed(n1, n2).map(i -> i * i).sum(); 

System.out.println(sumOfSquares); // 245 

請檢查IntStream docs以備將來參考。

相關問題