【问题标题】:Converting integer into array of digits [closed]将整数转换为数字数组[关闭]
【发布时间】:2013-04-13 12:14:06
【问题描述】:

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

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

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

【问题讨论】:

  • 你用的是C还是C++?
  • " 转换成两个数字数组,例如" -- 您的示例中只有一个数组。你有问题吗?
  • 您需要通过% 了解模除法(“余数”)。你的编码速度比你提出问题的速度要快。

标签: c++ c


【解决方案1】:

只使用这样的东西:

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) 我希望发帖者不介意,但我想我会添加一个用于这种情况的代码 sn-p,因为在转换之前正确确定小数位数并不容易:

{
    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)
【解决方案2】:

一个简单的解决方案是:

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++
【解决方案3】:

调用整数a

获取aa % 10的个位

a 向下移动,所以十位是个位,a / 10

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

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

【讨论】:

  • 通常重复除以 10 来预先确定结果的长度会更简单。可能不会比使用日志效率低多少,并且更容易理解/验证。
  • @Hot Licks 或者你可以只使用vector&lt;int&gt; 来处理所有事情,再也不用担心你的数组是否长度合适:)
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-18
    • 2015-01-06
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 2021-08-07
    相关资源
    最近更新 更多