我想排列我在向量中的數字。我在做排列時出現向量錯誤
以下是我的代碼。這段代碼非常簡單。首先,矢量的輸入大小由用戶輸入確定。然後,向量中的所有數字都進行了置換,以便在將所有數字連接成一個字符串時查找最大整數值和最小整數值。
#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