我正在尝试使用此方法,我将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
由于
本
答案 0 :(得分:6)
不,它正在返回long
。只是你首先在32位整数运算中执行算术。看看你是如何做算术的:
int total = x * n;
你甚至没有将结果存储为<{1}},所以我看不出你如何期望它保留一个完整的long
值。您需要long
成为total
- 和,您必须将其中一个操作数设为long
,以使乘法发生在64-位。
要强制在64位算术中进行乘法,您应该转换其中一个操作数:
long
或者,只需完全摆脱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;
}
相同的方式执行电源操作,例如......)
答案 1 :(得分: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;
}
Out put
99999998900000001