将整数数组转换为数字

8

假设我有一个整数数组:

a[0]=60; a[1]=321; a[2]=5;

现在我想将整个数组转换为一个整数,例如int b在运行代码后变为603215。

如何做到这一点?


3
我必须说,我从未考虑过这样做,也没有看到其他人尝试过。对于原创性或选择一个我不知道的问题表示赞赏。 - chris
1
这个问题与这个问题类似,但更简单。我的解决方案适用于此问题,但由于您不关心格式,因此stringstream的解决方案似乎更简单。 - juanchopanza
6个回答

15
使用std::stringstream
#include <iostream>
#include <sstream>

int main() {
    std::stringstream ss;
    int arr[] = {60, 321, 5};

    for (unsigned i = 0; i < sizeof arr / sizeof arr [0]; ++i)
        ss << arr [i];

    int result;
    ss >> result;
    std::cout << result; //603215
}

请注意,在C++11中,这个有些丑陋的循环可以被替换为:

for (int i : arr)
    ss << i;
另外,鉴于存在溢出的可能性,可以通过 ss.str() 访问该数字的字符串形式。为了避免溢出,使用字符串会比试图将其塞入整数中更容易。也应考虑负值,因为只有在第一个值为负时此方法才有效(并且有意义)。

7
int a[] = {60, 321, 5};

int finalNumber = 0;
for (int i = 0; i < a.length; i++) {
    int num = a[i];
    if (num != 0) {
        while (num > 0) {
            finalNumber *= 10;
            num /= 10;
        }
        finalNumber += a[i];
    } else {
        finalNumber *= 10;
    }
}

finalNumber已经得出结果:603215


1
还有几件事情需要注意,第一件是Java->C++方面的: 1. 在 C++ 中,数组不是类,并且没有 length 成员。通常最好使用 std::vector 代替,因为它提供了相应的功能。2. a 应该改成 arr - chris
@Kalai 谢谢你,回答得很好,聪明又棒 :)) - Inside Man
1
@Kalai,你的代码有问题。假设a[0]=50; a[1]=1; a[2]=0;,那么结果应该是5010,但是你的代码会跳过0,显示为501。 - Inside Man
1
@Stranger 谢谢您的评论。您有很好的分析能力。我已经编辑了代码。现在它会工作了。 - Kalai Selvan Ravi
@Kalai 还不行啊!使用int a[] = {60, 321, 0};作为第一行,你根本得不到答案!!! - Inside Man
@Kalai 我错了 :( 你的代码很棒,而且它运行得很好,是我在我的代码中做错了什么。所以谢谢 :)) - Inside Man

6
将所有数字连接成一个字符串,然后将其转换为数字。
#include <string>
int b = std::stoi("603215");

1
我知道这个问题不是很具体,但我想象数组元素可以是任意的(只要它不会溢出整数)。硬编码字符串值无法解决这个问题。假设你有C++11,该函数是stringstream的一个很好的替代起点。 - chris

3

这个算法可以实现:

  1. 使用 for 循环将数组中所有整数值转换为字符串。
  2. 从索引 0 到数组长度将所有字符串值附加到一个字符串中。
  3. 将该字符串再次转换为整数。

1
我让你的算法更易于阅读。FFR,在编辑空间的顶部有一个编号列表按钮。 - chris

2

迭代数组并将其值转换为字符串。然后将它们全部连接起来并转换回整数。

#include <string>

int a[] = {60, 321, 5};
std::string num = "";
for(auto val : a)
    num += a;
int b = std::stoi(num);

1
数组转整数

数字应以相反的方式存储

 for(int i=0;i<d;i++)
    {
        ans += num[i]*pow(10,i);
    }

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