C++ - 如何查找整数的长度

use*_*527 15 c++ integer numbers count digits

我试图找到一种方法来查找整数的长度(位数),然后将其放在一个整数数组中.赋值还要求在不使用STL类的情况下执行此操作,尽管程序规范确实说我们可以使用"常用C库"(要问我的教授我是否可以使用cmath,因为我假设log10(num) + 1是最简单的方法,但我想知道是否有另一种方式).

啊,这不必处理负数.非负数.

我正在尝试创建一个变体"MyInt"类,它可以使用动态数组处理更广泛的值.任何提示将不胜感激!谢谢!

Ker*_* SB 23

n任何基数中的整数位数通过划分直到完成为止:

unsigned int number_of_digits = 0;

do {
     ++number_of_digits; 
     n /= base;
} while (n);
Run Code Online (Sandbox Code Playgroud)


Rio*_*iot 12

不一定是最有效的,但使用C++的最短和最可读的之一:

std::to_string(num).length()
Run Code Online (Sandbox Code Playgroud)

  • @Zammbi问题从字面上指出“这不必处理负数”。 (3认同)
  • 而这个解决方案就满足了这个要求。它还可以处理负数。xD (3认同)

Pau*_*l R 11

如果你可以使用C库,那么一种方法是使用sprintf,例如

#include <cstdio>

char s[32];

int len = sprintf(s, "%d", i);
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用[snprintf](http://en.cppreference.com/w/cpp/io/c/fprintf)(nullptr,0,"%d",i);`而不需要`s`. (8认同)

Lih*_*ihO 6

"我是指整数中的位数,即"123"的长度为3"

int i = 123;

// the "length" of 0 is 1:
int len = 1;

// and for numbers greater than 0:
if (i > 0) {
    // we count how many times it can be divided by 10:
    // (how many times we can cut off the last digit until we end up with 0)
    for (len = 0; i > 0; len++) {
        i = i / 10;
    }
}

// and that's our "length":
std::cout << len;
Run Code Online (Sandbox Code Playgroud)

输出 3

  • 但是0有一位数. (3认同)

小智 5

有一个更好的方法

    #include<cmath>
    ...
    int size = log10(num) + 1
....
Run Code Online (Sandbox Code Playgroud)

适用于int和十进制