[英]add the sum of all numbers from a given number to a given number?
我創建了一個將兩個給定數字之間(包括兩個給定數字)相加的所有數字之和的方法,但由於某種原因,它不起作用。
public static int sumOfAll(int one, int two)
{
int bigNumber;
int smallNumber;
if(one < two){
bigNumber = two;
smallNumber = one;
}
else{
bigNumber = one;
smallNumber = two;
}
return ((smallNumber + bigNumber) / 2) * (bigNumber - smallNumber + 1);
}
這就是方法,這就是我聲明方法的方式。
System.out.println(MathOp.sumOfAll(100, 1));
由於某種原因,打印出來的結果應該是5000,而應該是5050。我使用的算法是正確的,我在wolframalpha上對其進行了測試。 我不知道為什么它在這里不起作用,任何幫助都很棒!
public static int sumOfAll(int one, int two)
{
int bigNumber=Math.max(one,two);
int smallNumber=Math.min(one,two);
return ((bigNumber+1-smallNumber)*(bigNumber+smallNumber))/2;
}
為什么不使用求和公式?
http://en.wikipedia.org/wiki/總結
http://upload.wikimedia.org/math/a/7/4/a74f603449dc34d308b50bbb6acaba1a.png
為此,只需將您的返回碼更改為
return (bigNumber*(bigNumber+1)-smallNumber*(smallNumber-1))/2;
你能試一下嗎
return (int)(((double)(smallNumber + bigNumber) / 2) * (bigNumber - smallNumber + 1));
原因是
正如@devnull指出的那樣,當您執行((smallNumber + bigNumber) / 2)
,由於將小數部分轉換為int
類型,因此小數部分被剔除。 因此,在進行乘法運算之前,需要顯式轉換為(double)
您可以嘗試將int更改為double
public static double sumOfAll(int one, int two)
{
double bigNumber;
double smallNumber;
if (one < two)
{
bigNumber = two;
smallNumber = one;
}
else
{
bigNumber = one;
smallNumber = two;
}
return ((smallNumber + bigNumber) / 2) * (bigNumber - smallNumber + 1);
}
首先,您不需要添加更多的代碼行,更改方法的返回類型或算法。
背景
在除數時,在某些情況下,結果是整數。 例如2/1 = 2或33/11 =3。在其他情況下,結果不是整數,例如3/2 = 1.5或10/9 = 1.11 ...
在JAVA中,如果嘗試使用全為整數的數字進行算術運算,則結果將產生和整數值。 例如2 + 3/5 = 2 + 0.6 。 但是由於3和5都是整數,因此JAVA會自動截斷結果的小數部分。 最后是2 + 0 = 2。
這個問題怎么解決?
由於您的方法計算的是“從a到b的數字的總和”,因此已知結果將產生一個整數值。 但是return語句包含可能產生雙精度值的算術運算。 在這種情況下,您可以通過在數字的末尾添加“ .0”來強制結果采用雙精度值,在這種情況下為2和1:
return ((smallNumber + bigNumber) / 2) * (bigNumber - smallNumber + 1);
變成:
return ((smallNumber + bigNumber) / 2.0) * (bigNumber - smallNumber + 1.0);
由於該方法必須返回整數,因此必須將返回的值強制轉換為整數:
return (int) (((smallNumber + bigNumber) / 2.0) * (bigNumber - smallNumber + 1.0));
結果
public static int sumOfAll(int one, int two){
int bigNumber;
int smallNumber;
if(one < two){
bigNumber = two;
smallNumber = one;
}
else{
bigNumber = one;
smallNumber = two;
}
return (int) (((smallNumber + bigNumber) / 2.0) * (bigNumber - smallNumber + 1.0));
}
一些輸入和輸出
輸入:sumOfAll(100,1)---------------------輸出:5050
輸入:sumOfAll(25,5)-----------------------輸出:315
輸入:sumOfAll(1000,100)-----------------輸出:495550
輸入:sumOfAll(80,3)-----------------------輸出:3237
輸入:sumOfAll(7795,7)--------------------輸出:30384889
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.