统计一个整型数字位数,逆序、正序输出

题目要求:输入一个n位的整型数字,分别输出其位数、顺序输出、逆序输出。

一、 求位数

  1. 基本思路:每次丢弃数字的个位数字,同时定义一个计算器count,初始化化为零来记录个位数字丢弃的次数,每丢弃一次,计数器加一。其中,丢弃的次数即计算器最终的值就是这个数字的位数。例如:12345,需要丢弃五次,计数器count最终值为5,即12345的位数为5。
  2. 具体操作见下表:(对数字12345举例)
数字n 保留丢弃后数字操作 丢弃后数字 count
12345 12345/10 1234 1
1234 1234/10 123 2
123 123/10 12 3
12 12/10 1 4
1 1/10 0 5
操作的总结 count++ n/10 count++

由上图可知:求一个数的位数可利用循环,将数字n/10便可丢弃最后一位,并且将n/10赋给n,带入下一次循环,同时count++。循环结束条件为当n等于0时。此时应当考虑当输入n为0的特殊情况,此情况有两种解决办法:
i、用if语句进行判断,当n等于0时,输出位数为1。
ii、用do while循环,此循环可以保证至少执行一次。

二、 逆序输出

  1. 基本思路:将第一问中丢弃的个位数字在丢弃前输出一下即可。例如:对于整数12345,每次将个位数字丢弃前打印一下,便可得到逆序输出序列“5、4、3、2、1”。
  2. 具体操作见下表:(对数字12345举例)
数字n 丢弃个位操作 丢弃的个位 保留丢弃后数字操作 丢弃后数n
12345 12345%10 5 12345/10 1234
1234 1234%10 4 1234/10 123
123 123%10 3 123/10 12
12 12%10 2 12/10 1
1 1%10 1 1/10 0
操作总结 n%10 printf n/10 n=n/10

由上图可知:首先利用n%10可得到整数个位数字,接着将其打印,最后利用n/10得到丢弃个位数字后的n,并将其赋给n,带入下一次循环。循环结束条件为当n等于0时。基本思路与求位数相似,只是多了利用n%10得到个位数字,并将其打印的操作。

三、 正序输出
1、首先对于数字12345举例,寻找规律。

数字n 丢弃第一位操作 第一位数字 保留丢弃后数字操作 丢弃后数n
12345 12345/10000 1 12345%10000 2345
2345 2345/1000 2 1234%1000 345
345 345/100 3 123%100 45
45 45/10 4 12%10 5
5 5/1 5 5%1 0
操作总结 n%10 printf n/10 n=n/10

由上图可知:首先利用n/( 10^(位数-1) )可得到整数的第一个数字,接着将其打印,最后利用n%( 10^(位数-1) )得到丢弃第一位数字后的n值,并将其赋给n,带入下一次循环。循环结束条件为当n等于0时。其中的位数的值,可以通过调用求位数的函数。
四、 代码实现

int Count(int n)
{
	int tmp = 0;
	do
	{
		tmp++;
		n /=10;
	}while(n != 0)

	return tmp;
}


void PrintReverse(int n)//逆序输出
{
	while(n != 0)
	{
		printf("%d ",n%10);
		n /= 10;
	}
	printf("\n");
}

void PrintOrder(int n)
{
	int c = Count(n);

	int power = 1;
	for(int i=0;i<c-1;i++)
	{
		power *= 10;
	}

	while(n != 0)
	{
		printf("%d ",n/power);
		n %= power;
		power /= 10;
	}
	printf("\n");
}

int main()
{
	PrintOrder(123456789);
	PrintReverse(123456789);
	printf("%d\n",Count(123456789));
	printf("%d\n",Count(1));
	printf("%d\n",Count(0))*/;

	return 0;
}

猜你喜欢

转载自blog.csdn.net/du_lijun/article/details/83067380