给出一个不多于五位的正整数,要求:1.求出它是几位数;2.分别输出每一位数字;3.按逆序输出每一位数字,例如:原数321,应输出123
程序员文章站
2022-03-22 08:34:03
...
给出一个不多于五位的正整数,要求:1.求出它是几位数;2.分别输出每一位数字;3.按逆序输出每一位数字,例如:原数321,应输出123.
大家先来看第一个问题,求出数字是几位数。这里要用到的很常用的一个办法就是用这个数字对10求余,例如:321%10=1;由此可以得出各位数字,然后输出。接着,我们将得出的个位数字去掉,这里要用10整除这个数字,321/10=32;再用求余方法便可得到十位数,以此类推;每做一次计算便将初始为0的变量加1,便可求出数字的位数。
代码如下:
int Digit(int n)
{
int tmp;
int i=0;;
while(n!=0)
{
tmp=n%10;
n/=10;
i++;
}
return i;
}
如果要将数字按照正序输出,这个看似麻烦,但大家可以想一下,假如我们要输出1234中的1,是不是要使得1234/1000=1;然后我们把1丢掉,1234%1000=234;那么如何得到这个1000,这里要用到指数函数pow();
代码如下:
void Order(int n)
{
int q=pow(10,i-1);
while(n!=0)
{
tmp=n/q;
n%=q;
q/=10;
}
return tmp;
}
若是按逆序输出,直接按第一问的方法即可。
全部代码如下,仅供参考:
#include<stdio.h>
#include<math.h>
int Count(long long n)
{
int tmp=0;
while(n!=0)
{
tmp++;
n=n/10;
}
return tmp;
}
void PrintReverse(long long n)
{
int i;
while(n!=0)
{
i=n%10;
printf("%d\n",i);
n=n/10;
}
}
void PrintOrder(long long n)
{
int tmp=Count(n);
double power=pow(10*1.0,tmp-1);
while(n!=0)
{
printf("%d\n",n/(int)power);
n%=(int)power;
power/=10;
}
}
int main()
{
int tmp=Count(23456);
printf("%d\n",tmp);
PrintOrder(23456);
PrintReverse(23456);
return 0;
}