将整数转换为数字数组

Converting integer into array of digits

本文关键字:数字 数组 转换 整数      更新时间:2023-10-16

我需要将两个整数转换为两个数字数组,因此例如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的初始值以及根据您想要确定值长度的方式来修改自增/自减值。


(布雷特黑尔)我希望海报不介意,但我想我会添加一个代码片段,我使用这种情况下,因为它不容易在转换之前正确确定十进制数字的数量:

{
    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<int> digits;
while (i)
{
    digits.push_back(i % 10);
    i /= 10;
}
std::reverse(digits.begin(), digits.end());

or, string based (I>= 0)

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

调用整型a

要得到a的单位数字,a % 10

a向下移动,使十位为个位数,a / 10

知道你什么时候完成,a == 0

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

如果你正在使用c++,你可以这样做:

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main() 
{
    int a=544;
    stringstream str;
    str << a;
    string arr;
    str>>arr;
    for(int i=0; i<arr.length(); i++)
    {
        cout << arr[i];
    }
    system("pause");
    return 0; 
}