34-C语言-递归实现一个数字每位之和

问题:
递归实现每个数字每位之和,数字为非负整数。如:输入123 输出 6.

思路:

  1. 输入的数字为非负整数,所以,加一个判断,如果输入的数字不是正整数,则重新输入
  2. 递归实现每位之和,
  3. 先给每一位取下来,用%10,然后n/10变为下一个数字,再去计算下一个数字然后再%10取下来。因此重复的动作便是递归。
  4. 而递归两个条件:一个是结束条件,当n%10 为1,n/10 为0时,递归结束,返回----“0”。 一个是限制条件,怎么去不断接近结束条件,即题中n是怎么变化的,——n/10.

代码如下:
 

#include <stdio.h>
int sum(int n)
{
	if(n < 1)
		return 0;
	else
		return n%10 + sum(n/10);
	
}
int main()
{
	printf("输入一个数字,返回它的各位数之和\n");
	int n;
	while(1)
	{
			scanf("%d",&n);
		if(n>0)
			break;
		else
		printf("输入有误,请重新输入正整数\n"); 
	}

	
	int weisum = sum(n);
	
	printf("各位数之和为:%d\n",weisum); 
	
	return 0;
 } 


版权声明:本文为m0_59844149原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。