给一个数字,求它是几位数,顺序、逆序输出各位数字

完整题目如下:

             

根据题目,我在编写代码时直接定义了五个整型。然后通过对每一位的计算和输出,来完成题目的要求。例如:为了求出是几位数,直接用定义的数字对10000、1000、100、10.进行整除或取余运算。然后通过判断结果是否为0,来判断是几位数。代码如下:

int num(long int x)
{
	long int a,b,c,d,e;
	printf("请输入一个小于99999的数字: %d\n",x);
	a=x/10000;
	b=x%10000/1000;
	c=x%1000/100;
	d=x%100/10;
	e=x%10;
	if(a != 0)
	{
		printf("是5位数,%ld %ld %ld %ld %ld",a,b,c,d,e);
		printf("逆序为:%ld %ld %ld %ld %ld",e,d,c,b,a);
	}
	else if (b != 0)
	{
		printf("是4位数,%ld %ld %ld %ld ",b,c,d,e);
		printf("逆序为:%ld %ld %ld %ld ",e,d,c,b);
	}
	else if (c != 0)
	{
		printf("是3位数, %ld %ld %ld ",c,d,e);
		printf("逆序为:%ld %ld %ld ",e,d,c);
	}
	else if(d != 0)
	{
		printf("是2位数,%ld %ld ",d,e);
		printf("逆序为:%ld %ld ",e,d);
	}
	else if (e != 0)
	{
		printf("是1位数,%ld ",e);
		printf("逆序为: %ld ",e);
	}
	return x;
}
int main()
{
	num(987);
	return 0;
}

 

 

   这是我没有听老师讲过之前写的代码,真的很不灵活。如果输入的数字超过我定义的五个整型。那这个代码就完全不能用了。而且这个代码也只是再进行了简单的运算之后,将每个数字人为规定的逆序输出...总之是完全没用的一个代码了。

 老师讲完之后,知道了在求数字位数的时候,可以采取一直丢弃个位的方法,直到将原本数字的最高位也丢弃。然后统计丢弃的次数,得出该数字是几位数。实现的方法则是对数字反复进行/=10.例如:

有数字1234:1234/10=123;123/10=12;12/10=;1/10=0.总共

进行了四次运算,所以该数字是四位数。

另外,我们还需要考虑所给数字为0时,输出的位数是几位。这个我们可以事先用if语句规定。代码如下:

int GetFigures(int n)
{
	if (n==0)
	{
		return 1;
	}
	int count=0;
	while (n!=0)
	{
		count++;
		n/=10;//丢个位数字
	}
	
	return count;
}

int main()
{
	printf("%d\n",GetFigures(1234));
	printf("%d\n",GetFigures(0));
	return 0;
}

 

当我们想要顺序输出数字时,先打印出最高位数字:用该数字对位数进行整除运算。然后再从数字的最高位对位数进行取余,将高位数字依次舍弃。再用剩下的数字对该位的位数进行整除运算,得出该位数字是几。例如:

有数字123456.(1).先对位数进行整除运算得到最高位:123456/100000=1;

                           (2).从最高位开始取余:123456%100000=23456,23456/10000=2  //得到万位数字。

                                                                 23456% 10000  =3456  ,   3456/  1000=3 //得到千位数字。

循环该过程。直到求出个位数字,代码如下:

void PrintOrder(int n)
{
	//得到n是几位数
	int c=GetFigures(n);
	
	//计算除以和取余的数字
	int power=(int)pow(10.0,c-1);
   // 循环输出每位数字

	do
	{
	  printf("%d",n/power);  
      n%=power; 	
	  power/=10;
	}while(n!=0);
	
	
}
int main()
{
	PrintOrder(123456);
	return 0;
}

 

逆序输出数字,需要考虑如果数字为负数的情况。当数字为负数时,我们可以先打印负号,然后让数字乘-1,作为正数来进行下面的计算。逆序输出,即就是先输出个位,所以就用该数字对10取余然后打印,打印出个位后丢弃个位,方法与求位数时相同:对10进行整除。再用剩下的数字对10取余并打印。循环该过程直到对10整除的结果为0时,证明已经计算到最高位。循环停止。例如:

数字123456:123456%10=6//打印个位数字6,123456/10=12345;

                          12345 %10=5                              , 12345/10=1234 ;

代码如下:

void PrintReverse(int n)
{
	if(n<0)
	{
		printf("-");
		n=-n;
	}
	
	int m;
	do
	{
		m = n%10;//打印个位
		n /=10;//丢弃个位,n!=0,再去打印个位
		printf("%d",m);
	}while(n!=0);
	printf("\n");
}
int main()
{
	PrintReverse(12345);
	PrintReverse(0);
	PrintReverse(-123489);
	return 0;
}

 

以上是我对该问题的理解。如果有错误的地方,欢迎大家指正。

 

 

猜你喜欢

转载自blog.csdn.net/weixin_42306711/article/details/89304436