欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-22 10:07:03
...

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

数的位数:

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

12345 5
1234 4
123 3
12 2
1 1

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

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