给定一个整数:求它是几位数;顺序输出它的每一位数:逆序输出每位数

(1)求它是几位数

#include

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  {
  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;
}
 

你可能感兴趣的:(C,C++)