如何获取数字的数字而不将其转换为字符串/字符数组?

chu*_*tar 32 c++

如何在不将数字转换为字符串或字符数组的情况下获取数字的数字?

Vin*_*jip 42

以下按重要性递增的顺序打印数字(即单位,然后是十位等):

do {
    int digit = n % 10;
    putchar('0' + digit);
    n /= 10;
} while (n > 0);
Run Code Online (Sandbox Code Playgroud)

  • 不值得投票.这是一个插图,而不是生产就绪的代码. (3认同)

tun*_*nuz 19

怎么样floor(log(number))+1

使用n位数并使用基数b,您可以表达任何数字pow(b,n)-1.因此,要获得基数b中数字x的位数,可以使用指数的反函数:base-b logarithm.要处理非整数结果,您可以使用该技巧.floor()+1

PS:这适用于整数,而不适用于带小数的数字(在这种情况下,您应该知道您使用的类型的精度是多少).

  • @tunnuz:这不是一个好的答案,因为这给出了数字而不是所要求的数字的数字. (3认同)
  • 以数字"123321"为例."位数"是"6".这个数字的数字是"1","2","3","3","2"和"1". (3认同)
  • 两年后,我仍然不明白为什么这个答案和其他答案一样不好. (2认同)

Mar*_*ork 13

因为每个人都在不知道问题的情况下进入.
这是我徒劳的尝试:

#include <iostream>

template<int D> int getDigit(int val)       {return getDigit<D-1>(val/10);}
template<>      int getDigit<1>(int val)    {return val % 10;}

int main()
{
    std::cout << getDigit<5>(1234567) << "\n";
}
Run Code Online (Sandbox Code Playgroud)


P S*_*ved 11

我已经看到很多答案,但他们忘了使用do {...} while()循环,这实际上是解决这个问题并0正确处理的规范方法.

我的解决方案是基于一个由纳文.

int n = 0;
std::cin>>n;

std::deque<int> digits;
n = abs(n);
do {
    digits.push_front( n % 10);
    n /= 10;
} while (n>0);
Run Code Online (Sandbox Code Playgroud)


Nav*_*een 8

你想要这样的事吗?

 int n = 0;
    std::cin>>n;

    std::deque<int> digits;
    if(n == 0)
    {
        digits.push_front(0);
        return 0;
    }

    n = abs(n);
    while(n > 0)
    {
        digits.push_front( n % 10);
        n = n /10;
    }
    return 0;
Run Code Online (Sandbox Code Playgroud)

  • 使用std容器而不是数组的+1 (3认同)

Ste*_*owe 6

像这样的东西:

int* GetDigits(int num, int * array, int len) {
  for (int i = 0; i < len && num != 0; i++) {
    array[i] = num % 10;
    num /= 10;
  }
}
Run Code Online (Sandbox Code Playgroud)

mod 10将为您提供数字.div 10s将推进这个数字.

  • 你可能没有`len` - 当`num`变为0时最好终止. (4认同)
  • 这可以很容易地重构为任何基数生成数字.现在它仅为基数10生成数字... (2认同)