题目:给一个不多于5位数的正整数.要求:
1.求出它是几位数;
2.分别输出每一位数字;
3.按逆序输出个位数字,例如原数字为123,输出321.
1.求位数
#inclede<stdio.h>
//1.求一个正整数的位数
//我们的思路是将它每次除以10后让他的位数加1,只到最后减小到0
int main()
{
int n,m;
int count=0;//设置一个计数器来计算位数
scanf("%d",&n);//输入一个正整数
m=n;//将数字赋值给m,这样计算后不会改变原来给正整数
while(m!=0)
{
m/=10;
count++;//每除以一次10,计数器加1
}
printf("%d的位数是%d\n",n,count);
return 0;
}
2.顺序输出每一位数
顺序输出每一位数字的话,我们的思路是依次取出它的最高位,输出最高位后,然后删掉它的最高位。
例如
输入1234我们先取出它的最高位1,用1234/1000的到1,然后用1234%1000得到234
第二次用234/100得到2,再用234%100的到34,
第三次用34/10得到3,34%10得到4,
第四次用 4/1得到4,4%1=0结束循环。
我们看到在这里面首先我们需要先得到他的位数,我们可以先利用第一问的代码求出位数
#include<stdio.h>
#include<math.h>
int main()
{
int n, m;
int count = 0;
scanf("%d", &n);
m = n;
while (m != 0)
{
m /= 10;
count++;
}
//先用第一问求出他的位数
m=n;//重新赋值,保存数据
int p=pow(10.0,count-1);//p是来看它的最大位是个位还是百位还是千位,万位等等
while(m!=0)
{
printf("%d",m/p);//依次输出它的最大位数
m%=p;//输出最大位后丢掉最大位数,让下一位成为新的最大位
p/=10;//最大位改变后位数要往后挪一位
}
return 0;
}
3.逆序输出每一位数
我们思路和第二个题类似,只不过这时候我们要先的到最低位,然后删掉最低位
例如 输入1234
1234%10=4,1234/10=123
123%10=3,123/10=12
12%10=2,12/10=1
1%10=1,1/10=0循环结束
#include<stdio.h>
int main()
{
int n, m;
scanf_s("%d", &n);
m = n;//保存数据
while (m != 0)
{
printf("%d",m%10);
m/=10;
}
return 0;
}