入数字digitcpp时间限制:1s 空间限制:512 MB【问题描述】你有一个长度为 n 的正整数a和一位要插入的数字d。你可以在正整数a中的任意位置插入该数字包括开头或结尾。你的目标是使结果尽可能大。例如您有号码 76543要插入的数字为 4。那么你可以获得的最大结果是765443可以通过两种方式获得:在a的第3位或第4位后面插入这个数字 。【输入格式】第一行两个整数nd表示正整数a的长度和要
【解题思路】 首先,我们需要找到可以插入数字d的最大位置。为了使结果尽可能大,我们应该从高位到低位依次比较当前位置的数字和d的大小。 具体步骤如下:
- 读取输入的n和d。
- 读取输入的n位正整数a。
- 初始化变量maxDigit为0,表示可以插入数字d的最大位置。
- 从高位到低位遍历正整数a的每一位:
- 如果当前位置的数字小于d,则更新maxDigit为当前位置的下一位。
- 如果当前位置的数字等于d,则更新maxDigit为当前位置。
- 如果当前位置的数字大于d,则跳出循环。
- 将数字d插入到a的maxDigit位置上,得到最终结果。
- 输出最终结果。
【代码实现】
#include <iostream>
#include <string>
using namespace std;
int main() {
int n, d;
cin >> n >> d;
string a;
cin >> a;
int maxDigit = 0;
for (int i = 0; i < n; i++) {
if (a[i] < d + '0') {
maxDigit = i + 1;
} else if (a[i] == d + '0') {
maxDigit = i;
} else {
break;
}
}
a.insert(maxDigit, to_string(d));
cout << a << endl;
return 0;
}
【复杂度分析】 该算法的时间复杂度为O(n),其中n为正整数a的长度
原文地址: https://www.cveoy.top/t/topic/iF7h 著作权归作者所有。请勿转载和采集!