[英]Sum of squares of digits of an integer in Java
我正在尝试编写一个采用非负参数并返回其数字平方和的方法的递归实现。 例如,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新手)。
谢谢!
在Java中, ^
不是“按幂”,它是按位XOR运算符。 要在Java中执行功能,请使用Math.pow
。 请记住, Math.pow
返回一个双Math.pow
因此,如果您只想要一个int
则需要将其Math.pow
转换为int
。 例如
if (n < 10) return (int)Math.pow(n, 2);
当然,正如msandiford所指出的那样,如果只需要计算2的幂,那么将一个数字本身相乘可能会更容易。 例如
if (n < 10) return n * n;
^
用于按位XOR运算符。 您可以使用Math.pow
,并将结果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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.