给定一个非负整数num,反复将各个位上的数字相加,直至结果是一位数

本周的第一道

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

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

解题思路:取出数据的每一位,进行相加,直至满足条件。

下面是C语言采取循环的解决方法

#include
int main()
{
	int data ,sum ,t ,temp;
	scanf("%d",&data);
	temp = data; 
	while(temp / 10 != 0){  
		data = temp; 
		sum = 0;
		while(data){
			t = data % 10;
			sum += t; 
			data /= 10;
		}
		temp = sum;
	}
	printf("%d",sum);
	return 0;
 } 

本题也可采取递归

int num(int x)
{
   int res = 0 ,temp;
   temp = x;
   if(temp / 10 == 0){
   	res += temp;
   }else{
   	while(x){
   		temp = x % 10;
   		res += temp; 
   		x /= 10;
   	}
   	if(res / 10 != 0){
   		return num(res);
   	}
   }
   return res;
}

你可能感兴趣的:(给定一个非负整数num,反复将各个位上的数字相加,直至结果是一位数)