这道题依然是要用到函数递归,之前写过一个类似的题,是要按顺序打印一个整数的每一位,这道题可以说是那个题目的变形。感兴趣的可以先看一下这篇文章。https://blog.youkuaiyun.com/Miss_Monster/article/details/81135344
那么这道题是要将一个整数的每一位相加。我们考虑两种情况:
①如果这个数 n < 9,代表它是个位数,那么它的每一位之和就是它本身 n。
②如果这个数 n > 9,代表它不是个位数,那么要想得到它的每一位就要给它做 n % 10 的计算,这样的得到的是它的一位数字,然后我们可以发现1729可以理解为 9 +172的每一位,172 % 10之后得到 2 与之前的 9 相加,再加上 17 的每一位就好了.....以此类推,那么递归调用的大事化小思想就很明显了。具体代码实现如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
size_t DigitSum(unsigned int num)
{
if (num > 9)
return num % 10 + DigitSum(num / 10);
else
return num;
}
int main()
{
s