数字的处理与判断:求位数、顺序输出位数、逆序输出位数。

题目:

输入一个整数,要求: 1、求出它是几位数 2、顺序输出每一位数字 3、按逆序输出各位数字。

样例输入:

12345

样例输出:

5
1 2 3 4 5
5 4 3 2 1

算法步骤:

1、首先,我们我们将输入的整数进行除以10,若结果为0则证明位数为1,若不为10,则继续进行以上操作,直至为0。 代码如下:
for(i=0;n!=0;i++) {n=n/10;} return i; 此时 i 就是位数。
2、其次(顺序输出),我们通过 i 求出10的 i 次方,用与在后续做除数,此时的除数用
/10来处理,因为我们后续要依次减少除数的倍数(所以最开始是求得10的 i 次方,而不是 i-1
次方继续上述操作),再将该整数进行求余(去除最高位)的形式来作为下一次循环的整数。继续进行上述操作,直到循环结束。 代码如下:
for(j=1;j<i;j++,m=m/10) {p=k/(m/10);printf("%d “,p); k=k%(m/10); }
printf(”%d\n",k); //输出最后一个数
3、最后(逆序输出),根据整数的特点,我们将整数进行对10求余,该余数则为最低位,输出该数,再将该整数进行除10得到的数作为下一次循环的整数。继续进行上述操作直到结束。
代码如下: for(j=1;j<i;j++) {p=k%10;printf("%d “,p);k=k/10;
}printf(”%d",k);

#include<stdio.h>
int i,j;     //定义全局变量,因为在逆序和顺序函数中也要使用变量i,j,这样可以减少定义的次数 
main()
{
    
    
	void nixu(int p,int k);        //声明求逆序的函数 
	void shunxu(int m,int p,int k);  //声明求顺序的函数 
	int m=1,n,p,k;
	scanf("%d\n",&n);        //输入要操作的整数 
	k=n;
	for(i=0;n!=0;i++)        //计算位数的循环 
	{
    
    
		n=n/10;
	}
	printf("位数:%d\n",i);  
	for(j=1;j<=i;j++)       //进行10的n次方的计算,也可以用pow(10,i) ,但是在只用时要用<math.h>库函数。
	{
    
    
		m=m*10;
	}
	printf("顺序输出:\n"); 
	shunxu(m,p,k);	
	printf("逆序输出:\n"); 
	nixu(p,k);
} 
void nixu(int p,int k)
{
    
    
	for(j=1;j<i;j++)
	{
    
    
		p=k%10;          //求余来找到输入数中靠右边的数 
		printf("%d ",p);     //依次输出求出来的数 
		k=k/10;           //k除10为下一次循环做准备 
	}
	printf("%d",k);      //输出最后一个要输出的数 
}
void shunxu(int m,int p,int k)
{
    
    
	for(j=1;j<i;j++,m=m/10)  //除以10是因为要满足每一次循环时除数在一次小10倍 
	{
    
    
		p=k/(m/10);
		printf("%d ",p);      //依次输出求出来的数 
		k=k%(m/10);          //k求余为下一次循环做准备 
	}
	printf("%d\n",k);      //输出最后一个要输出的数 
}

注:代码中有文字打印部分的语句是为了方便阅读,如果不需要这些部分,可将其用注释的形式,注释掉。

猜你喜欢

转载自blog.csdn.net/qq_46724903/article/details/112971874
今日推荐