1

我有一个这样的数字:int num = 36729;我想获得组成数字的位数(在本例中为 5 位)。

我怎样才能做到这一点?

4

9 回答 9

10

使用这个公式:

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

return 1;
于 2012-06-04T18:39:20.243 回答
2
int digits = 0;
while (num > 0) {
  ++digits;
  num = num / 10;
}
于 2012-06-04T18:39:16.570 回答
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);
    }
}
于 2012-06-04T20:46:38.547 回答
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
...
于 2020-11-17T14:19:39.873 回答
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;
}
于 2012-06-04T19:55:11.700 回答
0

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

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

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

于 2012-06-04T19:39:46.620 回答
0

提示:使用/and%运算符。

于 2012-06-04T18:38:47.370 回答
0
int findcount(int num) 
{ 
    int count = 0; 
    if(num != 0){
      while(num) { 
          num /= 10; 
          count ++; 
      } 
      return count ; 
    }
    else
      return 1;
} 
于 2012-06-04T19:05:50.447 回答
-1

你不能这样做吗?

    int num = 36729;
    num.ToString().Length
于 2012-06-04T19:55:06.643 回答