顺序和逆序输出整数的每一位数字及位数

 

1、         求一个正整数是几位数

#include<stdio.h>
int Number(int n)
{
   int bit=0;
  do
  {
     n=n/10;
     bit++;
  }while(n!=0);
  return bit;
}

n/=10丢掉尾数,每丢掉一个尾数,位数bit加1,当尾数为0时,循环结束

最初采用的是while循环,在测试值时发现整数0的位数为空,while循环中当n=0时,并不能进入循环,而事实上0的位数为1,则循环至少执行一次,考虑采用do······while循环。

2、逆序输出每一位数字

void PrintReverse(int n)
{
	int a=0;
	int b=-1;
	if(n>=0)
	{
	do
	{
	  a=n%10;
	  n/=10; 
	  printf("%d ",a);
	} while(n!=0);
	}
	else
	{
		do
	{
	  a=n%10;
	  n/=b*10;
	  b*=b;
	  printf("%d ",a);
	} while(n!=0);
	}
	printf("\n");
}

n%10获得最后一位数字,n/10丢掉最后一位数字;循环再次获得修改后的n的最后一位数字,再次丢掉,循环

当只有第一个do···while循环,当n为负数(n=-123)时输出结果为-3 -2 -1;若要求使输出结果为-3 2 1;则加了一个if···else语句判断,当整数为负数时,对n丢掉最后一位数得到(-12)乘以-1得到(12),之后获得的数字均为正;

注意b的初始值为-1;一次循环中b*=b的值为1,之后的b 在else  do···while循环语句中的值始终为1;

3,顺序输出每一位数字

void PrintOrder(int n)
{
	int x=Number(n);
	int power=1;
	for(int i=1;i<x;i++)
	{
      power*=10;
	}
	do
	{
        printf("%d ",n/power);
		n%=power;
		power/=10;
		
	}while(n!=0);
	printf("\n");
}

n/power获得最高位(123/100=1),其中power=10^(n的位数),n%=power丢掉最高位(123%100=23),power/=10则(power=100/10=10),再次循环;

注意在顺序输出时要借助正整数n的位数,可以调用功能函数Number(n),并定义一个整形变量接收值(int x=Number(n)),用位数x控制for循环的次数及power的值。

调用函数:

int main()
{
        printf("%d\n",Number(0));
	printf("%d\n",Number(12345));
	printf("%d\n",Number(-123));

	PrintReverse(0);
	PrintReverse(12345);
	PrintReverse(-123);

	PrintOrder(0);
	PrintOrder(12345);
	PrintOrder(-123);


	return 0;
}

猜你喜欢

转载自blog.csdn.net/f__yuan/article/details/81048525
今日推荐