输入一个高精度的正整数n,去掉其中任意s个数字后剩下的数字按原左右次序组成一个新的正整数。用贪心算法的C++代码
时间: 2023-08-20 12:51:21 浏览: 173
以下是使用贪心算法实现的C++代码:
```cpp
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string removeDigits(string num, int s) {
int n = num.length();
// 如果要移除的数字数量大于等于原数字长度,则返回空字符串
if (s >= n) {
return "";
}
for (int i = 0; i < s; i++) {
int j = 0;
// 找到第一个比后面数字大的位置
while (j < num.length() - 1 && num[j] <= num[j + 1]) {
j++;
}
// 移除该位置的数字
num.erase(num.begin() + j);
}
// 去掉前导零
int leadingZeros = 0;
while (leadingZeros < num.length() - 1 && num[leadingZeros] == '0') {
leadingZeros++;
}
num.erase(0, leadingZeros);
return num;
}
int main() {
string num;
int s;
cout << "请输入一个正整数n:";
cin >> num;
cout << "请输入要移除的数字数量s:";
cin >> s;
string result = removeDigits(num, s);
if (result.empty()) {
cout << "无法移除足够数量的数字!" << endl;
} else {
cout << "移除数字后得到的新整数为:" << result << endl;
}
return 0;
}
```
这段代码首先定义了一个名为`removeDigits`的函数,该函数接受一个表示正整数的字符串和要移除的数字数量`s`作为输入。然后,使用贪心算法从左到右遍历字符串,找到第一个比后面数字大的位置,并将其移除。重复这个过程`s`次。
在`main`函数中,首先从用户输入中获取正整数`n`和要移除的数字数量`s`。然后调用`removeDigits`函数来移除数字并得到结果。最后,根据结果输出相应的信息。
请注意,这段代码假设输入的正整数是合法的。如果需要进行输入验证,请在代码中添加相应的检查。
阅读全文