0

x*y の値を long として返すようにしたこのメソッドを取得しようとしています。ただし、intを返しています。私が知る限り、メソッドヘッダーで long を返すように指定することは何をする必要がありますか?

必要な結果が得られません。何が欠けていますか?

コード

public class Returnpower 
{

    public long power(int x,int n) 
    {   
        int total = x * n;
        if(x < 0 && n < 0)
        {
            System.out.println("X and/or N are not positive");
            System.exit(0);
        }
        return (total);

    }

    public static void main(String[] args)
    {
        Returnpower power = new Returnpower();

        System.out.println(power.power(99999999,999999999));
    }
}

出力

469325057

ありがとう

ベン

4

2 に答える 2

6

いいえ、それは を返していlongます。最初に 32 ビット整数演算で演算を実行しているだけです。算術をどのように行っているかを見てください。

int total = x * n;

結果を として保存することすらしていないため、完全な値longを保持する方法がわかりません。-であるlong必要があり、乗算を 64 ビットで実行するには、オペランドの 1 つをtotalaにする必要があります。longlong

乗算を 64 ビット演算で強制的に実行するには、オペランドの 1 つをキャストする必要があります。

long total = x * (long) n;

または、変数を完全に削除するだけです。とにかくパラメーターを使用する前にtotal、引数の検証を実行することをお勧めします。

public long power(int x, int n) 
{   
    if (x < 0 && n < 0)
    {
        // Use exceptions to report errors, not System.exit
        throw new IllegalArgumentException("x and/or n are negative");
    }
    return x * (long) n;
}

(さらに、これは明らかに、たとえばと同じ方法で電源操作を実行していません...)Math.pow

于 2013-08-16T06:19:23.167 に答える
1

intに変更long

    public long power(int x,int n) 
    {
    long xx=x;
    long nn=n;
    long total = xx * nn;
    if(x < 0 && n < 0)
    {
        System.out.println("X and/or N are not positive");
        System.exit(0);
    }
    return total;
    }

出力

99999998900000001
于 2013-08-16T06:20:33.190 に答える