1、 求一个正整数是几位数
#include<stdio.h>
int Number(int n)
{
int bit=0;
do
{
n=n/10;
bit++;
}while(n!=0);
return bit;
}
n/=10丢掉尾数,每丢掉一个尾数,位数bit加1,当尾数为0时,循环结束
最初采用的是while循环,在测试值时发现整数0的位数为空,while循环中当n=0时,并不能进入循环,而事实上0的位数为1,则循环至少执行一次,考虑采用do······while循环。
2、逆序输出每一位数字
void PrintReverse(int n)
{
int a=0;
int b=-1;
if(n>=0)
{
do
{
a=n%10;
n/=10;
printf("%d ",a);
} while(n!=0);
}
else
{
do
{
a=n%10;
n/=b*10;
b*=b;
printf("%d ",a);
} while(n!=0);
}
printf("\n");
}
n%10获得最后一位数字,n/10丢掉最后一位数字;循环再次获得修改后的n的最后一位数字,再次丢掉,循环
当只有第一个do···while循环,当n为负数(n=-123)时输出结果为-3 -2 -1;若要求使输出结果为-3 2 1;则加了一个if···else语句判断,当整数为负数时,对n丢掉最后一位数得到(-12)乘以-1得到(12),之后获得的数字均为正;
注意b的初始值为-1;一次循环中b*=b的值为1,之后的b 在else do···while循环语句中的值始终为1;
3,顺序输出每一位数字
void PrintOrder(int n)
{
int x=Number(n);
int power=1;
for(int i=1;i<x;i++)
{
power*=10;
}
do
{
printf("%d ",n/power);
n%=power;
power/=10;
}while(n!=0);
printf("\n");
}
n/power获得最高位(123/100=1),其中power=10^(n的位数),n%=power丢掉最高位(123%100=23),power/=10则(power=100/10=10),再次循环;
注意在顺序输出时要借助正整数n的位数,可以调用功能函数Number(n),并定义一个整形变量接收值(int x=Number(n)),用位数x控制for循环的次数及power的值。
调用函数:
int main()
{
printf("%d\n",Number(0));
printf("%d\n",Number(12345));
printf("%d\n",Number(-123));
PrintReverse(0);
PrintReverse(12345);
PrintReverse(-123);
PrintOrder(0);
PrintOrder(12345);
PrintOrder(-123);
return 0;
}