Java中整数位数的平方和

时间:2014-11-18 22:41:07

标签: java recursion

我正在尝试编写一个带有非负参数的方法的递归实现,并返回其数字的平方和。例如,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的新手)。

谢谢!

2 个答案:

答案 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);
}