将整数转换为数字数组

9
我需要将两个整数转换为两个数字数组,例如 544 将变为 arr[0] = 5, arr[1] = 4, arr[2] = 4
我已经找到一些实现此功能的算法,但它们会创建新数组并返回。我需要为两个数组分配内存,因此我想通过引用传递两个整数并直接在它们上面进行操作。
我认为我可以这样做,因为这些整数实际上是模板类型,所以它们应该是可更改的。这就是为什么我在这里添加了 C++ 标签的原因。

1
你在使用哪个,C还是C++? - James M
1
"将数字拆分为两个数组,例如:"-- 您的示例中只有一个数组。您有问题吗? - Jim Balter
1
你需要学习取模运算(“余数”)与“%”符号的使用。如果你早点掌握了这个知识,就能比提问所花费的时间更快地编写代码了。 - Hot Licks
4个回答

10

只需要像这样使用:

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) */
    }
}

如果你想要实际字符,那么 a[i++] = n % 10 应该改为 a[i++] = '0' + (n % 10) - Joseph King

9
一个简单的解决方案是:
int i = 12312278;

std::vector<int> 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');

好主意。虽然这对于 c 不起作用。不确定为什么问题同时标记了 cc++ - Mario

1

将整数a称为。

要获取a的个位数字,使用a%10

要将a向下移位,使十位成为个位数字,使用a / 10

要知道何时完成,使用a == 0

要知道数组需要多大才能开始,使用min(ceil(log(a+1, 10)), 1)(要确信此方法有效,请在计算器中尝试其对数部分。如果您没有多参数对数,则使用恒等式log(x,y) == log(x)/log(y)


经常情况下,仅通过反复除以10来预先确定结果的长度会更简单。这种方法可能不比使用对数函数低效多少,且更易理解和验证。 - Hot Licks
或者你可以只使用 vector<int> 来代替一切,再也不必担心你的数组长度是否正确了 :) - Patashu

0
如果你在使用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; 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接