C程序设计中有一道很经典的题目,如下:
给出一个不多于5位的正整数,要求:
(1)求出它是几位数;
(2)分别输出每一位数字;
(3)按逆序输出各位数字,例如原数为321,应输出123。
根据上边的题目,可以总结出整型数字处理这类题的做题规律。
1.统计整数数字位数
通常的办法是判断该数字在哪个区间内,即得出它是几位数。如在0-9区间为1位数,在10-99区间为2位数...等等。但这种办法未免太过繁琐,而且也不通用。我们可以这样想,如果每次都能去掉最后一位数字,那么可以通过去掉的次数来统计它是几位数,这样就方便很多。也就是每次用整型数字n整除10,去掉最后一位数字再将结果赋值给n,并且定义一个计数器来统计去掉数字的个数,去掉一位数字计数器便加1,这样循环下去直到n==0。代码如下:
#include <stdio.h>
int Figure(int n)
{
int count = 0;
do
{
count++;
n /= 10;
}while(n != 0);
return count;
}
int main()
{
printf("%d\n",Figure(0));
printf("%d\n",Figure(1));
printf("%d\n",Figure(12));
printf("%d\n",Figure(-12));
printf("%d\n",Figure(123));
printf("%d\n",Figure(-123));
printf("%d\n",Figure(1234));
printf("%d\n",Figure(-1234));
printf("%d\n",Figure(4559307));
printf("%d\n",Figure(-4559307));
return 0;
}
2.将整型数字逆序输出
将整型数字逆序输出,也就是将统计数字位数时每次去掉的数字先保留下来输出,后抛弃。代码如下:
#include <stdio.h>
void PrintReverse(int n)
{
do
{
printf("%d",n%10);
n/=10;
}while(n!=0);
printf("\n");
}
int main()
{
PrintReverse(0);
PrintReverse(1);
PrintReverse(12);
PrintReverse(123);
PrintReverse(1234);
PrintReverse(4567);
return 0;
}
3.将整型数字顺序输出
整型数将整型数字顺序输出,就是依次将最高位到最低位输出。可以用整型数字n整除该数字10的位数次方并输出,再用n对该数字10的位数次方求余并赋值给n,最后将该数字10的位数次方整除10再赋值给本身,一直循环下去直到n==0。代码如下:
#include <stdio.h>
int Figure(int n)
{
int count = 0;
do
{
count++;
n /= 10;
}while(n != 0);
return count;
}
void PrintFigure(int n)
{
int count = Figure(n);
int power = 1;
for(int i=1; i<=count-1; i++)
{
power *= 10;
}
do
{
printf("%d ",n/power);
n %= power;
power /= 10;
}while(n != 0);
printf("\n");
}
int main()
{
PrintFigure(0);
PrintFigure(1);
PrintFigure(12);
PrintFigure(123);
PrintFigure(1234);
PrintFigure(4559307);
return 0;
}