将整数转换为数字数组

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

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

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

只是使用这样的东西:

 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 } 

请注意,这将导致以相反的顺序返回数字。 这可以通过修改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) */ } } 

简单的解决方案是:

 int i = 12312278; std::vector digits; while (i) { digits.push_back(i % 10); i /= 10; } std::reverse(digits.begin(), digits.end()); 

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

 for (auto x : to_string(i)) digits.push_back(x-'0'); 

调用整数a

要获得a的单位数, a % 10

要向下移动所以十位是单位数, a / 10

要知道你何时完成, a == 0

要知道你的数组首先需要有多大, min(ceil(log(a+1, 10)), 1) (为了说服自己这是有效的,在计算器中尝试它的对数部分。如果你不知道没有多个参数日志,使用身份log(x,y) == log(x)/log(y)

如果您使用的是C ++,可以执行以下操作:

 #include  #include  #include  using namespace std; int main() { int a=544; stringstream str; str << a; string arr; str>>arr; for(int i=0; i