小刚同学最棒了
已知:一个整数
求解:
- 这个数的位数;
- 正序输出每一位的数字;
- 逆序输出每一位的数字。
问题分析
例如:
整数 | 123 | 解析步骤 | 有关性 |
正序输出每一位 | 1 2 3 | 123/100=1,123%100=23 23/10=2,23%10=3 3/1=3 | pow(10,n) |
逆序输出 | 3 2 1 | 123%10=3,123/10=12 12%10=2,12/10=1 1%10=1,1/10=0 | 10 |
代码详解
#include <stdio.h>
#include <math.h>int GetFigures(int n)
{
if(n == 0)//do...while或者count = 1,再进行while循环
return 1;
int count = 0;
while(n != 0)
{
n = n / 10;
count++;
}
return count;
}
void PrintReverse(int n)//逆序输出n的每一位数
{
if(n < 0)
printf("-"),n=-n;
if(n == 0)//同上do...while
printf("0");
while(n != 0)
{
printf("%d ",n % 10);
n/=10;//丢弃个位数字
}
printf("\n");
}
//正序输出n的每一位数
void PrintOrder(int n)
{
int count = GetFigures(n)-1;
int power = (int)pow(10.0,count);
do
{
printf("%d ",n/power);
n %= power;
power /= 10;
}while(n != 0);
/*for(int i = GetFigures(n)-1;i>=0;i--)//函数调用太多,效率不高
{
printf("%d ",n/(int)pow(10.0,i));
//pow函数一般返回的是double型,故在使用时,注意强制转化类型
n %= (int)pow(10.0,i);
}*/
printf("\n");
}int main()
{
PrintOrder(12345789);
PrintOrder(0);
PrintOrder(-12345789);
PrintReverse(12345);
PrintReverse(1);
printf("%d\n",GetFigures(12345));
printf("%d\n",GetFigures(123456789));
printf("%d\n",GetFigures(0));
printf("%d\n",GetFigures(-123456789));
return 0;
}
结果显示
1 2 3 4 5 7 8 9
0
-1 -2 -3 -4 -5 -7 -8 -9
5 4 3 2 1
1
5
9
1
9
请按任意键继续. . .
在代码中,我多次提到效率不高,因为强制类型的转换增加了时间,之后我会将改进的代码重新写出来,希望不负众望。
这个是函数可以多次使用,不会被局限在小的知识点上,希望以后多方面的构思问题,使得自己的解决方案更好!