写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
题目要求
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19。
问题分析
首先我 对这个题目的分析为,如果要将每位数都相加,则要找出这个数的每一位,然后将他们的每位都加在一起就得到了这个数的每位数之和,先将此数模上10,得到最后一位数,然后再除以10,再模上10,得到倒数第二位数…以此类推,得到每位数,然后相加。
主要递归代码如下:
int DigitSum(int n)
{
if (n<=9)
{
return n;
}
//返回每位数相加之和。
if (n>9)
{
return n%10+DigitSum(n/10);
}
return 0;
//n%10 n/10 n%10 n/10
}
全部代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
int DigitSum(int n)
{
if (n<=9)
{
return n;
}
//返回每位数相加之和。
if (n>9)
{
return n%10+DigitSum(n/10);
}
return 0;
//n%10 n/10 n%10 n/10
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n = 0;
printf ("请输入一个非负整数:>");
scanf ("%d",&n);
DigitSum(n);
printf ("%d\n",DigitSum(n));
system ("pause");
return 0;
}
展示结果如下: