【问题标题】:Sum of squares of digits of an integer in JavaJava中整数的数字平方和
【发布时间】:2014-11-18 22:41:07
【问题描述】:

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

谢谢!

【问题讨论】:

  • n/10 将自动截断为整数,因为n10 都是ints。所以你的那部分代码已经是正确的。如果你想要一个非整数(对于其他程序),你需要写 n/10.0n/10d(double)n/10

标签: java recursion


【解决方案1】:

在 Java 中,^ 不是“权力”的,它是按位 XOR 运算符。要在 Java 中执行功能,请使用 Math.pow。请记住,Math.pow 返回一个双精度数,因此如果您只想要一个整数,则需要将其转换为 int。例如

if (n < 10) return (int)Math.pow(n, 2);

当然,正如 msandiford 所指出的,如果您只需要计算 2 的幂,那么将一个数字乘以自身可能更容易。例如

if (n < 10) return n * n;

【讨论】:

  • 当需要整数参数和结果时,x squared 可能更好地表示为x * x,而不是用Math.pow(...) 使事情复杂化。
  • -_- 我不知道为什么我没有想到这一点 - 它更简单。问题已更新;谢谢。
  • @msandiford x squared 可能更好地表示为x * x,即使x 是一个浮点数。使用pow 可能需要机器开始对所有内容取对数,这会更昂贵,除非它针对整数幂进行优化——我不知道。
【解决方案2】:

^ 用于按位异或运算符。您可以使用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);
}

【讨论】:

    猜你喜欢
    • 2015-12-28
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 2020-12-07
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多