在向量中连接数字以形成一个数字

时间:2015-06-06 19:25:34

标签: c++ vector

我有一个函数可以提供矢量系列的数字。这一系列数字将被附加以形成一个长的长数并存储在另一个向量中。

例如

Vector1= |2|3|4|5|5|
vector2= |23455|     |

空格表示一个数字的结尾,函数开始输出第二个数字系列。我认为反向迭代器和乘以10^x在某种程度上是一种解决方案。

例如代码

vector<long long> a, fin;
for (int i = 0; i <6; i++)
{
    a.push_back(i + 1);    //  adds 1 2 3 4 5 6  in slots of v1


}
int j = 0;
for (vector<long long>::reverse_iterator i = a.rbegin(); i != a.rend(); i++)  { 
// want to append v1 members to form one number 123456 and store it in first slot of vector2;

    fin[0] += (a[(*i)] * (10 ^ j)); 
    j++;
}
cout << fin[0];

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用字符串流将数字转换为字符串,然后将字符串转换回数字。

std::vector<long long> input = { 1, 2, 3, 4, 5 };
std::ostringstream oss;
for (auto i : input)
    oss << i;
long long output = std::stoll(oss.str());

假设您只有一位数字,更有效的方法是:

long long output = 0;
for (auto i : input)
    output = output * 10 + i;

答案 1 :(得分:1)

您未在fin 向量中添加任何元素。您还错误地将^误认为电源功能。您需要使用std::pow

<强>尝试:

#include <cmath>
#include <vector>
#include <iostream>

using namespace std;

int main ()
{
    vector<long long> a;
    vector<long long> fin(1); // add an element

    for (int i = 0; i <6; i++)
    {
        a.push_back(i + 1);
    }

    int j = 0;
    for (vector<long long>::reverse_iterator i = a.rbegin(); i != a.rend(); i++) {
//      fin[0] += (a[(*i)] * (10 ^ j)); // ??
        fin[0] += ((*i) * pow(10, j)); // not ^
        j++;
    }
    cout << fin[0];
}

<强>输出:

123456