获取int中的位数

use*_*815 19 c c++

如何检测整数的长度?如果我有le:int test(234567545);

我怎么知道int有多长?比如告诉我里面有9个数字???

我试过了 :

char buffer_length[100];


    //  assign directly to a string.

    sprintf(buffer_length, "%d\n", 234567545);

    string sf = buffer_length;


    cout <<sf.length()-1 << endl;
Run Code Online (Sandbox Code Playgroud)

但大部分都是更简单的方式或更干净......

Luc*_*ore 36

分裂怎么样:

int length = 1;
int x = 234567545;
while ( x /= 10 )
   length++;
Run Code Online (Sandbox Code Playgroud)

或者使用log10方法<math.h>.

请注意,log10返回a double,因此您必须调整结果.

  • 注意,`log(0)`是-infinity并将其转换为整数是UB. (2认同)

She*_*lal 11

做一个功能:

int count_numbers ( int num) {
   int count =0;
   while (num !=0) {   
      count++;  
      num/=10;
   } 
   return count;
}
Run Code Online (Sandbox Code Playgroud)

  • 我想我们可以在之前添加一个简单的 (2认同)
  • 如果 `num==0` 则它应该返回 `1`,因为它有一个数字。 (2认同)

Joh*_*ese 6

似乎没有人提到将它转换为字符串,然后获得长度.我不确定这是多么高效,但它确实在一行代码中完成:)

int num = 123456;
int len = to_string(num).length();

cout << "LENGTH of " << num << " is " << len << endl;
// prints "LENGTH of 123456 is 6"
Run Code Online (Sandbox Code Playgroud)

  • “似乎没有人提到过”——除了原来的海报,你的意思是?:-) (2认同)

San*_*ish 5

您可以使用stringstream如下所示

stringstream ss;
int i = 234567545;
ss << i;
cout << ss.str().size() << endl;
Run Code Online (Sandbox Code Playgroud)