给一个不多于五位的正整数,分别按要求输出

1、求一个整数的位数
2、分别输出每一位数字
3、逆序输出

//1.
#include<stdio.h>
int count(int n)
{
int tmp;
for(tmp=1;n>1;tmp++)
{
n/=10;
}
return tmp;
}
int main()
{
printf("%d\n",count(1997));
}
//2.3
#include<stdio.h>
int main()
{
int i=789,w,q,b,s,g;
if (i>9999)
{printf(“输入数字为五位数\n”);
w=i/10000;
q=i%10000/1000;
b=i%10000%1000/100;
s=i%10000%1000%100/10;
g=i%10000%1000%100%10;
printf(“个十百千万位上的数字分别为%d,%d,%d,%d,%d\n”,g,s,b,q,w);
printf(“逆序输出为%d,%d,%d,%d,%d\n”,w,q,b,s,g);
}
else if(i<9999&&i>999)
{printf(“输入数字为四位数\n”);
q=i/1000;
b=i%1000/100;
s=i%1000%100/10;
g=i%1000%100%10;
printf(“个十百千位上的数字分别为%d,%d,%d,%d\n”,g,s,b,q);
printf(“逆序输出为%d,%d,%d,%d\n”,q,b,s,g);
}
else if(i<999&&i>99)
{
printf(“输入数字为三位数\n”);
b=i/100;
s=i%100/10;
g=i%100%10;
printf(“个十百位上的数字分别为%d,%d,%d\n”,g,s,b);
printf(“逆序输出为%d,%d,%d\n”,b,s,g);
}
else if(i<99&&i>9)
{
printf(“输入数字为二位数\n”);
s=i/10;
g=i%10;
printf(“个十位上的数字分别为%d,%d\n”,g,s);
printf(“逆序输出为%d,%d,\n”,s,g);
}
else
{
printf(“输入数字为一位数\n”);
g=i;
return 0;
}
}

改进版:
题①确实需要定义一个计数器,但是用for循环没有考虑到输入的数为0的这种情况,0也是一位数,结果应为1,因此将for循环改为do while循环就能解决这一问题;
题③只需在n/10的循环中,加入对10求余的步骤,就能解决此问题;
题②实则比题③稍难一些,需要使用①的函数求出数字个数,具体方法如下:
(①-count、②-PrintOrder、③-PrintReverse)

#include <stdio.h>

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

	return temp;
}

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

void PrintReverse(int n)
{
	int temp = 0;
	do
	{
		printf("%d ",n % 10);
		n /= 10;
	}while(n != 0);
		printf("\n");
}

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

	printf("%d\n",Count(711));
	PrintOrder(711);
	PrintReverse(711);

	printf("%d\n",Count(47115));
	PrintOrder(47115);
	PrintReverse(47115);

	return 0;
}

结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qx04070711/article/details/83114238