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价值。您需要total成为long-并且您必须使其中一个操作数 along以使乘法以 64 位发生。

要强制在 64 位算术中进行乘法运算,您应该转换以下操作数之一:

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

更改intlong

    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 回答