返回

Go, Swift, Python, Java - 反复相加,终成个位数!

IOS

在编程中,我们经常会遇到需要对数字进行处理的情况。比如,计算一个数的各位数字之和,或者将一个数拆分成它的各个位数字。今天,我们就来介绍一个有趣的算法问题:给定一个非负整数,反复将各个位上的数字相加,直到结果为一位数。我们来看看这个问题的不同语言解法吧!

**Go** 

```go
func addDigits(num int) int {
    if num < 10 {
        return num
    }
    sum := 0
    for num > 0 {
        sum += num % 10
        num /= 10
    }
    return addDigits(sum)
}

Swift

func addDigits(_ num: Int) -> Int {
    if num < 10 {
        return num
    }
    var sum = 0
    var n = num
    while n > 0 {
        sum += n % 10
        n /= 10
    }
    return addDigits(sum)
}

Python

def add_digits(num):
    if num < 10:
        return num
    sum = 0
    while num > 0:
        sum += num % 10
        num //= 10
    return add_digits(sum)

Java

class Solution {
    public int addDigits(int num) {
        if (num < 10) {
            return num;
        }
        int sum = 0;
        while (num > 0) {
            sum += num % 10;
            num /= 10;
        }
        return addDigits(sum);
    }
}

这些代码都使用了递归的方法来解决这个问题。首先,我们检查数字是否已经是一位数。如果是,则直接返回该数字。否则,我们将数字的各个位上的数字相加,得到一个新的数字。然后,我们对这个新的数字重复这个过程,直到得到一位数。

这个问题还有另一种解决方法,那就是使用循环。我们可以使用一个循环来不断地将数字的各个位上的数字相加,直到得到一位数。这种方法虽然没有递归方法简洁,但是更容易理解。

希望这篇文章对您有所帮助!如果您还有其他问题,欢迎随时提问。

练习题

  1. 给定一个正整数,计算其各位数字之和。
  2. 将一个正整数拆分成它的各个位数字。
  3. 给定一个正整数,计算其各位数字之积。

答案

  1. 可以使用循环或递归的方法来计算各位数字之和。
  2. 可以使用循环或递归的方法来将一个正整数拆分成它的各个位数字。
  3. 可以使用循环或递归的方法来计算各位数字之积。

延伸阅读