将整数转换为数字数组

use*_*786 7 c c++

我需要将两个整数转换成两个数字数组,所以例如544就会变成arr[0] = 5, arr[1] = 4, arr[2] = 4.

我发现了一些算法,但是他们创建了新的数组,然后返回.我必须为两个数组分配这个内存,所以我想通过引用传递两个整数并直接对它们执行此操作.

我想我可以这样做,因为这些整数实际上是模板类型,因此它们应该是可变的.这就是我在这里添加C++标签的原因.

Mar*_*rio 8

只是使用这样的东西:

int n = 544; // your number (this value will Change so you might want a copy)
int i = 0; // the array index
char a[256]; // the array

while (n) { // loop till there's nothing left
    a[i++] = n % 10; // assign the last digit
    n /= 10; // "right shift" the number
}
Run Code Online (Sandbox Code Playgroud)

请注意,这将导致以相反的顺序返回数字.这可以通过i根据您希望如何确定值的长度来修改初始值以及增量/减量来轻松更改.


(Brett Hale)我希望海报不介意,但我想我会添加一个我用于这种情况的代码片段,因为在转换之前正确确定十进制数字并不容易:

{
    char *df = a, *dr = a + i - 1;
    int j = i >> 1;

    while (j--)
    {
        char di = *df, dj = *dr;
        *df++ = dj, *dr-- = di; /* (exchange) */
    }
}
Run Code Online (Sandbox Code Playgroud)


mas*_*oud 5

一个简单的解决方案是:

int i = 12312278;

std::vector<int> digits;

while (i)
{
    digits.push_back(i % 10);

    i /= 10;
}

std::reverse(digits.begin(), digits.end());
Run Code Online (Sandbox Code Playgroud)

或者,基于字符串(i> = 0)

for (auto x : to_string(i))
    digits.push_back(x-'0');
Run Code Online (Sandbox Code Playgroud)