(1)求它是几位数
#include <stdio.h>
int Getfigures(int n) //统计整数n的位数
{
int count=0;
do
{
count++;
n/=10;
}while(n!=0);
return count;
}
/* int Getfigures(int n) /*若要用此函数,则对0求其位数会出错,可加if-else语
句补缺。此方法采用while()语句,上面采用do-while() 语句,这就体现了while()语句
和do-while() 语句的区别,事实证明二者只在0和1上有区别。*/
{
int count=0;
while(n!=0)
{
count++;
n/=10;
}
return count;
}
*/
void PrintOrder(int n) //顺序输出各个位上的数字
{
/*1234/1000 -> 1 1234%1000=234
234/100 -> 2 234%100=34
34/10 -> 3 34%10=3
4 /1 -> 0 4%1=0
每次输出高位数字后丢弃高位(用‘/’实现),n每次变为丢弃高位后的数字(用‘%’实现)*/
int count;
count=Getfigures(n);
int power=1;
for(int i=0;i<count-1;i++)
{
power*=10;
}
do
{
printf("%d",n/power);
n%=power;
power/=10;
}while(n!=0);
printf("\n");
}
void PrintReserve(int n) //逆序输出各个位上的数字
{
do
{
printf("%d",n%10);
n/=10;
}while(n!=0);
printf("\n");
}
/*问:十进制‘2018’中有几个‘1’?
这类问题可用该十进制数对10取余(2018%10),判断其是否等于1,每次通过取余将其低位丢弃,直至为0结束。
若问某二进制数中有几个1,同理,可用该二进制数对2取余,再进行判断。*/
int main()
{
printf("%d\n",Getfigures(1234));
PrintOrder(1234);
PrintReserve(1234);
printf("%d\n",Getfigures(0));
PrintOrder(0);
PrintReserve(0);
printf("%d\n",Getfigures(-567));
PrintOrder(-567);
PrintReserve(-567);
return 0;
}