完整题目如下:
根据题目,我在编写代码时直接定义了五个整型。然后通过对每一位的计算和输出,来完成题目的要求。例如:为了求出是几位数,直接用定义的数字对10000、1000、100、10.进行整除或取余运算。然后通过判断结果是否为0,来判断是几位数。代码如下:
int num(long int x)
{
long int a,b,c,d,e;
printf("请输入一个小于99999的数字: %d\n",x);
a=x/10000;
b=x%10000/1000;
c=x%1000/100;
d=x%100/10;
e=x%10;
if(a != 0)
{
printf("是5位数,%ld %ld %ld %ld %ld",a,b,c,d,e);
printf("逆序为:%ld %ld %ld %ld %ld",e,d,c,b,a);
}
else if (b != 0)
{
printf("是4位数,%ld %ld %ld %ld ",b,c,d,e);
printf("逆序为:%ld %ld %ld %ld ",e,d,c,b);
}
else if (c != 0)
{
printf("是3位数, %ld %ld %ld ",c,d,e);
printf("逆序为:%ld %ld %ld ",e,d,c);
}
else if(d != 0)
{
printf("是2位数,%ld %ld ",d,e);
printf("逆序为:%ld %ld ",e,d);
}
else if (e != 0)
{
printf("是1位数,%ld ",e);
printf("逆序为: %ld ",e);
}
return x;
}
int main()
{
num(987);
return 0;
}
这是我没有听老师讲过之前写的代码,真的很不灵活。如果输入的数字超过我定义的五个整型。那这个代码就完全不能用了。而且这个代码也只是再进行了简单的运算之后,将每个数字人为规定的逆序输出...总之是完全没用的一个代码了。
老师讲完之后,知道了在求数字位数的时候,可以采取一直丢弃个位的方法,直到将原本数字的最高位也丢弃。然后统计丢弃的次数,得出该数字是几位数。实现的方法则是对数字反复进行/=10.例如:
有数字1234:1234/10=123;123/10=12;12/10=;1/10=0.总共
进行了四次运算,所以该数字是四位数。
另外,我们还需要考虑所给数字为0时,输出的位数是几位。这个我们可以事先用if语句规定。代码如下:
int GetFigures(int n)
{
if (n==0)
{
return 1;
}
int count=0;
while (n!=0)
{
count++;
n/=10;//丢个位数字
}
return count;
}
int main()
{
printf("%d\n",GetFigures(1234));
printf("%d\n",GetFigures(0));
return 0;
}
当我们想要顺序输出数字时,先打印出最高位数字:用该数字对位数进行整除运算。然后再从数字的最高位对位数进行取余,将高位数字依次舍弃。再用剩下的数字对该位的位数进行整除运算,得出该位数字是几。例如:
有数字123456.(1).先对位数进行整除运算得到最高位:123456/100000=1;
(2).从最高位开始取余:123456%100000=23456,23456/10000=2 //得到万位数字。
23456% 10000 =3456 , 3456/ 1000=3 //得到千位数字。
循环该过程。直到求出个位数字,代码如下:
void PrintOrder(int n)
{
//得到n是几位数
int c=GetFigures(n);
//计算除以和取余的数字
int power=(int)pow(10.0,c-1);
// 循环输出每位数字
do
{
printf("%d",n/power);
n%=power;
power/=10;
}while(n!=0);
}
int main()
{
PrintOrder(123456);
return 0;
}
逆序输出数字,需要考虑如果数字为负数的情况。当数字为负数时,我们可以先打印负号,然后让数字乘-1,作为正数来进行下面的计算。逆序输出,即就是先输出个位,所以就用该数字对10取余然后打印,打印出个位后丢弃个位,方法与求位数时相同:对10进行整除。再用剩下的数字对10取余并打印。循环该过程直到对10整除的结果为0时,证明已经计算到最高位。循环停止。例如:
数字123456:123456%10=6//打印个位数字6,123456/10=12345;
12345 %10=5 , 12345/10=1234 ;
代码如下:
void PrintReverse(int n)
{
if(n<0)
{
printf("-");
n=-n;
}
int m;
do
{
m = n%10;//打印个位
n /=10;//丢弃个位,n!=0,再去打印个位
printf("%d",m);
}while(n!=0);
printf("\n");
}
int main()
{
PrintReverse(12345);
PrintReverse(0);
PrintReverse(-123489);
return 0;
}
以上是我对该问题的理解。如果有错误的地方,欢迎大家指正。