我想排列我在向量中的数字。我在做排列时出现向量错误
以下是我的代码。这段代码非常简单。首先,矢量的输入大小由用户输入确定。然后,向量中的所有数字都进行了置换,以便在将所有数字连接成一个字符串时查找最大整数值和最小整数值。
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
string retS(const vector<int>& v)
{
string s = "";
for (int e : v) {
s += to_string(e);
}
return s;
}
int main(void) {
int num = 0;
cin >> num;
vector<int> numbers;
for (int i = 0; i < num; ++i) {
int n;
cin >> n;
numbers.push_back(n);
}
sort(numbers.begin(), numbers.end());
unsigned long long maxVal = 0;
unsigned long long minVal = 987654321;
do {
string s = retS(numbers);
if (stoll(s) > maxVal) {
maxVal = stoi(s);
}
if (stoll(s) < minVal)
minVal = stoi(s);
} while (std::next_permutation(numbers.begin(), numbers.end()));
cout << maxVal+minVal << endl;
}
但是,问题是当我输入两位数字时发生错误。例如,我将10 20 30 40 50 60 70 80 90 20
输入到我的矢量中,然后我的代码无法工作。我认为这是因为整数变量的范围,因为如果我假设只有一个或两个数字的数字可以被接受,串联的字符串的大小可以是20(〜高达20)。 因此,我从int
改变了我的整数变量unsigned long long
,这是我认为存储整数类型的最长范围值,但程序在执行时被中止。
所以,你能帮我让这段代码运行良好吗?
预期产量是多少? – Zereges
预期输出将是所有置换数字中的最大值+最小值并将它们连接起来。 – sclee1
@Anders K.预期输出取决于输入值。例如,我输入了1,2,3,那么maxVal将是'321',minVal将是'123'。但问题是两位数值的情况。 – sclee1