欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-22 21:45:11
...

题目要求:输入一个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 pow
12345 12345/10000 1 12345%10000 2345 10000/10
2345 2345/1000 2 1234%1000 345 1000/10
345 345/100 3 123%100 45 100/10
45 45/10 4 12%10 5 10/10
5 5/1 5 5%1 0
操作总结 n/pow printf n%pow n=n/10 pow=pow/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;
}