簡體   English   中英

將所有數字的總和從給定數字添加到給定數字?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM