gpt4 book ai didi

c++ - 进行排列时 vector 出错

转载 作者:行者123 更新时间:2023-11-30 01:42:14 27 4
gpt4 key购买 nike

我正在尝试排列 vector 中的数字。

下面是我的代码。这段代码非常简单。首先, vector 的输入大小由用户输入决定。然后,当我将所有数字连接成一个字符串时,对 vector 中的所有数字进行排列,以便找到最大整数值和最小整数值。

#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 输入到我的 vector 中,然后我的代码不起作用。我认为这是因为整数变量的范围,因为如果我假设只能接受一个或两个数字,则连接的字符串的大小可以为 20(~最多 20)。因此,我将我的整数变量从 int 更改为 unsigned long long 类型,我认为这是存储整数类型的最长范围值,但是,程序中止了当我执行时。

那么,你能帮我让这段代码正常工作吗?

最佳答案

正如 Zereges 所指出的,这里的问题是您试图存储的数字超出了 C++ 内置的最大数字变量类型的容量。您可以解决这个问题,将如此长的数字存储为字符串。这将解决您遇到的问题,但会使您的代码变慢一些。

如果您不想过多地使用字符串,这可以帮助您:https://mattmccutchen.net/bigint/这是一个处理大整数的库。

希望对你有帮助

关于c++ - 进行排列时 vector 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39930389/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com