给出一个任意位数的整数。
1.怎样求它的位数?
2.怎样顺序依次输出每一位数字?
3.怎样逆序依次输出每一位数字?
//定义函数:
//一、求位数
#include<stdio.h>
#include<math.h>
void Count(long long n)
{
int i=0;
do //用do while 语句(至少循环一次)可以避免 n=0 时,返回值 i=0 的特殊情况。
{
n/=10; //丢弃个位数 用“ /=10 ” 对该数整除,取商。
i++;
}while(n!=0);
printf("%d\n",i);
}
//二、顺序输出
void PrintOrder(long long n)
{
if(n<0) //此 if 语句是针对负数的输出,避免循环输出全为负数。
{
n=-n;
printf("-");
}
int tmp=0;
int power=pow (10.0,Count(n)-1);// power 是用来保存每次循环对 n 整除取商的除数
do
{
printf("%d ",n/power);
n=n%power;
power/=10;
}while(n!=0);
printf("\n");
}
//三、逆序输出 (对 10 取余 并依次输出)
void PrintReverse(long long n)
{
if(n<0) //此 if 语句是针对负数的输出,避免循环输出全为负数。
{
n=-n;
printf("-");
}
int tmp=0;
do
{
tmp=n%10; //保留末位数字用 “%=10” 对该数取余。
printf("%d ",tmp);
n/=10;
}while(n!=0);
printf("\n");
}
//主函数:
int main()
{
Count(123456789); //求位数测试用例。
Count(-123456789);
Count(0);
PrintOrder(123456789);//顺序输出测试用例。
PrintOrder(-123456789);
PrintOrder(0);
PrintReverse(123456789);//逆序输出测试用例。
PrintReverse(-123456789);
PrintReverse(0);
return 0;
}
运行结果为:
注意:
1.尽量用 “ do while ”函数,因为“ do while ”至少运行一次,保证了当 n=0 时 循环不会终止。
2.注意取余和取整除数的用法。
3.用pow(x,y)公式时注意x要为浮点型。