递归之各位相加

给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。
示例:

输入: 38
输出: 2
解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。
上代码:

#include <stdio.h>
#include <string.h>
int addDigits(int num);
int main()
{
    
    
	int sum, r;
	scanf("%d", &sum);
	r = addDigits(sum);
	printf("%d", r);
	
}
int addDigits(int num)
{
    
    
	int a[1000], i, k = num, sum = 0;
	for(i = 0; k != 0; i++)
	{
    
    
		a[i] = k % 10;
		k = k / 10;
		sum += a[i];
	}
	while(sum >= 10)
	{
    
    
		return addDigits(sum);
	}
	return sum;
	
}


题目要求运用递归,我们首先需要了解它的终止条件,即各位数相加之和小于10.因此我们可以写一段代码来计算其原本各位数之和,如果不满足条件就以现在这个数作为新的参数进行下一轮判断,思想比较简单。

猜你喜欢

转载自blog.csdn.net/jiuchena/article/details/103427823