方法1:循环
先用这个数去对10求余,得到最容易得到的个位,然后用这个数去除10再对10求余,得到十位,以此类推,直到最后的数除10的商是0,那么就得到了这个数的每一位
示例图如下:
代码如下:代码的缺点是倒着打印这个数的每一位
#include<stdio.h>
int main()
{
unsigned int num = 0;
scanf("%u", &num); //1234
while (num)
{
printf("%d ", num % 10);
num = num / 10;
}
return 0;
}
方法2:递归
大化小的思路,求法和方法1一致,不过是自己调用自己
以1234为例: 打印1234每一位可以看成打印123+4,以此类推。示例图如下:
代码实现如下:
#include<stdio.h>
void print(int n)
{
if (n > 9)
{
print(n / 10);
}
printf("%d ", n%10);
}
int main()
{
unsigned int num = 0;
scanf("%u", &num);
print(num);//接受一个整型值(无符号),按照顺序打印它的每一位。
return 0;
}
代码实现过程:
扩展:写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
思路和方法2一致,不过是将求出来的数加一下
代码:
int DigitSum(unsigned int n)
{
if (n > 9)
{
return n % 10 + DigitSum(n / 10);
}
else
{
return n;
}
}
#include<stdio.h>
int main()
{
unsigned int n = 0;
scanf("%d", &n);
int ret = DigitSum(n);
printf("ret=%d", ret);
}