获取数字的位数

时间:2012-06-04 18:38:04

标签: c

我有一个这样的数字:int num = 36729;我希望得到组成数字的位数(在这种情况下是5位数)。

我该怎么做?

9 个答案:

答案 0 :(得分:9)

使用此公式:

if(num)
  return floor(log10(abs((double) num)) + 1);

return 1;

答案 1 :(得分:2)

int digits = 0;
while (num > 0) {
  ++digits;
  num = num / 10;
}

答案 2 :(得分:1)

提示:使用/%运算符。

答案 3 :(得分:1)

int unsigned_digit_count(unsigned val) {
    int count = 0;
    do {
        count++;
        val /= 10;
    } while (val);
    return count;
}

int digit_count(int val) {
    if (val < 0) {
        return 1+unsigned_digit_count(-val); // extra digit for the '-'
    } else {
        return unsigned_digit_count(val);
    }
}

答案 4 :(得分:1)

  1. 通过除法直到完成后,即可获得任意基数中整数n的位数:
unsigned int number_of_digits = 0;
do {
    ++number_of_digits; 
    n /= base;
} while (n);
  1. 不一定是最高效的,但它是使用C ++的最短且最易读的代码之一: std::to_string(num).length()

  2. 还有一种更好的方法:

#include<cmath>
...
int size = trunc(log10(num)) + 1
...

答案 5 :(得分:0)

int findcount(int num) 
{ 
    int count = 0; 
    if(num != 0){
      while(num) { 
          num /= 10; 
          count ++; 
      } 
      return count ; 
    }
    else
      return 1;
} 

答案 6 :(得分:0)

对于0以外的任何输入,计算输入绝对值的以10为底的对数,取该结果的最低值并加1:

int dig;
...
if (input == 0)
  dig = 1;
else
  dig = (int) floor(log10(abs((double) input))) + 1;

0是特殊情况,必须单独处理。

答案 7 :(得分:0)

低效,但奇怪的优雅......

#include <stdio.h>
#include <string.h>

int main(void)
{
    // code to get value
    char str[50];
    sprintf(str, "%d", value);

    printf("The %d has %d digits.\n", value, strlen(str));

    return 0;
}

答案 8 :(得分:-1)

你不能这样做吗?

    int num = 36729;
    num.ToString().Length