#include <stdio.h>
#include <math.h>
/*
给一个整数数字num(正负都可以)
求出它是几位数;
分别输出每一位数字;
按逆序输出各位数字;
例如原数为:321,应输出123.
*/
int GetPlace(int num) //得到位数
{
int count=0;
while( num!=0 )
{
count ++ ; //循环次数与数字位数相等
num/=10; //每次循环整除一次减少一位,num=0,循环结束
}
return count ; //将值返回给函数
}
void PrintReverse(int num) //逆序输出
{
printf("逆序数字为 ");
while(num!=0)
{
printf("%d ",num%10); //对数取余可得到某一位数
num/=10; //取余之后,再整除10可得到原数字除个位以外的数字,直到num=0,循环结束
}
printf("\n");
}
{
int count=0;
while( num!=0 )
{
count ++ ; //循环次数与数字位数相等
num/=10; //每次循环整除一次减少一位,num=0,循环结束
}
return count ; //将值返回给函数
}
void PrintReverse(int num) //逆序输出
{
printf("逆序数字为 ");
while(num!=0)
{
printf("%d ",num%10); //对数取余可得到某一位数
num/=10; //取余之后,再整除10可得到原数字除个位以外的数字,直到num=0,循环结束
}
printf("\n");
}
//两个顺序输出,所用循环不同,思路相同。while ,for ,do …while三种混合使用
void PrintOrder1(int num)
{
int a=GetPlace(num); //a接收位数,根据位数决定取余和整除
int power = 1;
int i=1;
while( i<a ) //顺序输出:此循环决定被整除的数,12345/10000=1;2345/1000=2....从而得到第一位数...等等
{
int a=GetPlace(num); //a接收位数,根据位数决定取余和整除
int power = 1;
int i=1;
while( i<a ) //顺序输出:此循环决定被整除的数,12345/10000=1;2345/1000=2....从而得到第一位数...等等
{
power *= 10; //累乘
i++;
}
printf("顺序输出方法1:数字为 ");
for( ; num!=0 ; power /= 10)
{
printf("%d ",num/power); //顺序输出每一位数
num %= power; //每次减少num的某位数
}
printf("\n");
}
power *= 10; //累乘
i++;
}
printf("顺序输出方法1:数字为 ");
for( ; num!=0 ; power /= 10)
{
printf("%d ",num/power); //顺序输出每一位数
num %= power; //每次减少num的某位数
}
printf("\n");
}
void PrintOrder2(int num) //方法2
{
int a=GetPlace(num);
int power = 1 ;
for( int i = 1 ; i < a ; i++)
{
power *= 10 ;
}
printf("顺序输出方法2:数字为 ");
{
int a=GetPlace(num);
int power = 1 ;
for( int i = 1 ; i < a ; i++)
{
power *= 10 ;
}
printf("顺序输出方法2:数字为 ");
do
{
printf("%d ",num/power);
num %= power;
power /= 10;
}while(num!=0);
printf("\n");
}
int main()
{
PrintReverse(123456);
PrintOrder1(123456);
PrintOrder2(123456);
return 0;
}
*/