ベクトルの数字を置換しようとしています。置換を行ったときのベクトルのエラー
以下は私のコードです。このコードは非常に簡単です。第1に、ベクトルの入力サイズはユーザ入力によって決定される。そして、すべての数値を1つの文字列に連結したときに、最大整数値と最小整数値を見つけるために、ベクトル内のすべての数値が置換されます。
#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;
}
ただし、2桁の数字を入力したときにエラーが発生するという問題があります。たとえば、10 20 30 40 50 60 70 80 90 20
を私のベクトルに入力したところ、私のコードは機能しませんでした。私は1つまたは2つの数字だけが受け入れられると仮定した場合、連結された文字列は20(〜20まで)のサイズになる可能性があるため、整数変数の範囲にあると思います。 したがって、整数変数をunsigned long long
の型に変更しました。これはint
です。これは整数型を格納するための最長範囲の値ですが、実行時にプログラムが中止されました。
このコードはうまく動作するように手伝ってもらえますか?
期待される出力は何ですか? – Zereges
予想される出力は、すべての置換された数値の最大値+最小値になり、連結されます。 – sclee1
@Anders K. expected出力は入力値に依存します。たとえば1,2,3を入力すると、maxValは '321'、minValは' 123'になります。問題は2桁の値の場合です。 – sclee1