输出一个数的位数,逆序输出,正序输出.(计数器算法)

输出一个数的位数,逆序输出,正序输出.(计数器算法)

数的位数:

运用丢的思想,就好比丢一个数字,计一个数字。
从前往后丢,用求余;从后往前丢,用整除
eg:12345 从后往前开始丢数字

123455
12344
1233
122
11

//12345先丢掉5计数为1,剩下的数1234再丢掉最后一位4计数加一为2。。。。。。
直到数字全丢掉,计数结束,返回计数值。

#include<stdio.h>
int Count(long long n)
{
    if(n==0)//判断输入的数是否为零;
    {  return 1; }//为0则输出1;0是一位数;
      int m=0;
     while(n!=0)
     {
         m++;//计数累加;
         n/=10;//丢掉一个数;
     }
     return m;
}
int main()
{
   printf("%d\n",Count(-12345));
   printf("%d\n",Count(5984546));
   printf("%d\n",Count(0));
   return 0;
}

在这里插入图片描述

逆序输出

和计数器算法原理一样,只不过就把丢掉的数字打印出来.(从后往前丢)

#include<stdio.h>
#void PrintfReverse(long long n)
{
  if(n==0)
  { 
     printf("%d",0);//0逆序输出就是0;
  }
  if(n<0)
  {
     printf("-");//先打印一个负号;
     n=-n;//取它的绝对值再进入下面循环;
  }
  while(n!=0)
  {
     printf("%d",n%10);//得到最后一位数并打印出来;
     n/=10;//(n=n/10;)把n的值整除10,赋值给新n;
  }
  printf("\n")//循环完逆序完,换行;
}
int main()
{
    PrintfReverse(-12345);
    PrintfReverse(0);
    PrintfReverse(12345);
    return 0;
}

顺序输出

计数器算法,从头开始丢并输出.(用求余)
eg:
|输入12345(5位数) | 让它整除10000(5-1)^10) | 得到并输出1|//再丢掉1得到剩下数字(用求余方法丢掉)
|得到2345(4位数) | 整除1000(4-1)^10 |得到并输出2|
| 345 | 100 | 3|
| 45 | 10 | 4|
| 5 | 1 | 5 |
//每次整除的数字都是(这个数的位数-1)的10次方,所以要调用位数Count()函数

//顺序输出,得到高位,丢掉高位
#include<stdio.h>
#include<math.h>//要用到pow()函数
 void PrintfOrder(long long n)
{
   if(n==0)
   {
      printf("%d",0);
   }//0顺序输出就是0;
   if(n<0)
   {
      printf("-");
      n=-n;
   }
   int tmp=0;
   int power=0;
   while(n!=0)
   {    tmp=Count(n);//Count()函数在文章前面,用的时候调用就行;
        power=pow(10.0,tmp-1);//pow()是double类型,
       printf("%d ",n/power);
       n%=power;//将n求余,赋值给新n;
   }
   printf("\n");
}
int main()
{ 
  PrintfOrder(-12345)PrintfOrder(0);
  PrintfOrder(12345);
  return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值