我正在尝试编写一个带有非负参数的方法的递归实现,并返回其数字的平方和。例如,sumSquareDigits(10)应返回1,sumSquareDigits(103)应返回10.
这是我的代码:
public static int sumSquareDigits(int n) {
if (n < 10) return n^2;
return (((n % 10)^2) + sumSquareDigits(n/10));
}
例如,对于给定的整数625,它将类似于:
(625%10)^ 2 +(62,5%10)^ 2 +(6,25)^ 2 = 5 ^ 2 + 2 ^ 2 +(6,25)^ 2
当然这是错误的,因为最后一个词应该是6而不是6,25。我正在寻找的是一种截断6,25以便它变为6的方法。
我们怎么做?我会很感激任何提示更好地实现这个功能(我是Java的新手)。
谢谢!
答案 0 :(得分:2)
在Java中,^
不是&#34;对于权力&#34;它是按位XOR运算符。要在Java中执行权限,请使用Math.pow
。请记住,Math.pow
会返回一个双精度数,因此如果只需要整数,则需要将其强制转换为int
。 E.g。
if (n < 10) return (int)Math.pow(n, 2);
当然,正如msandiford指出的那样,如果你只需要计算2的幂,那么单独乘以一个数字可能更容易。 E.g。
if (n < 10) return n * n;
答案 1 :(得分:0)
^
用于按位XOR运算符。您可以使用Math.pow
,并将结果投放到int
,因为Math.pow
会返回double
:
public static int sumSquareDigits(int n) {
if (n < 10) return (int) Math.pow(n, 2);
return (int)((Math.pow((n % 10), 2)) + sumSquareDigits(n/10));
}
或者因为它只是平方,所以只需将基数乘以:
public static int sumSquareDigits(int n) {
if (n < 10) return n * n;
return ((n % 10) * (n % 10)) + sumSquareDigits(n/10);
}