打印一个整数的每一位

题目:打印一个整数的每一位 ,例如输入数字1234,打印出来的结果为1  2  3  4


分析:我们还记得之前有做过“逆序的三位数”的题(https://blog.csdn.net/melody_1016/article/details/81092305),其中的思路完全可以用到这道题当中。先把1234逆序成4321,然后就转化为“整数的分解”,即采取模除的方法,取下4321的每一位;每取下一位,就输出该取下的数,直到取完为止。(注意坑!!!)

代码:

#define  _CRT_SECURE_NO_WARNINGS  1
#include
#include
int ReverseNum(int num)
{
	int ret = 0;
	//把数字逆序过来
	while (num > 0)
	{
		int digit = num % 10;
		ret = ret * 10 + digit;
		num /= 10;
	}
	return ret;
}
void PrintNum(int num)//但是这种方法对于700这类数字来说失败,因为ReverseNum(700)后就成了7,所以再调用PrintNum函数,还是7
{
	int _num = ReverseNum(num);
	//逆序打印
	while (_num > 0)
	{
		int d = _num % 10;
		printf("%d ", d);
		_num /= 10;
	}
}
int main()
{
	int num = 0;
	scanf("%d",&num);
	PrintNum(num);
	system("pause");
	return 0;
}

运行结果:

可以看到,上面那种思路对于像700这种情况还是有问题的,原因就在于 ReverseNum函数,它逆序过来后是7,所以后面的“取下每一位”输出时就出错了。

换一种思路:

(1)先采用%10,/10的办法依次取下1234 的每一位,把取下的每一位存入数组中,则数组中的元素就成了arr[4]={4,3,2,1},

(2)从后往前遍历数组打印,输出每一位

这里我们还可以使用递归方式:

#define  _CRT_SECURE_NO_WARNINGS  1
#include
#include
//递归
void PrintNum(int num)
{

	if (num > 9)
	{
		PrintNum(num / 10);
		
	}
	//printf("%d ", num);
	printf("%d ", num % 10);
}

int main()
{
	int num = 0;
	scanf("%d",&num);
	PrintNum(num);
	//printf("%d ", ret);
	system("pause");
	return 0;
}

运行结果:

你可能感兴趣的:(C语言小练习)