题目:
输入一个整数,要求: 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); //输出最后一个要输出的数
}
注:代码中有文字打印部分的语句是为了方便阅读,如果不需要这些部分,可将其用注释的形式,注释掉。