题目 1695: 最小新整数

时间限制: 2s 内存限制: 192MB 提交: 179 解决: 110
题目描述

给定一个十进制正整数n(0<n<1000000000),每个数位上数字均不为0。n的位数为m。
现在从m位中删除k位(0<k<m),求生成的新整数最小为多少?
例如: n=9128456,k=2,则生成的新整数最小为12456。


输入

第一行t, 表示有t组数据;
接下来t行,每一行表示一组测试数据,每组测试数据包含两个数字n,k。


输出

t行,每行一个数字,表示从n中删除k位后得到的最小整数。

样例输入
2
9128456 2
1444 3
样例输出
12456
1
提示

可采用字符串保存整数值,在 C++ 中,std::string 是一个用于处理字符串的类。

1. 头文件

    使用 std::string 需要包含 <string> 头文件。

#include <string>
#include <iostream> // 用于输入输出
using namespace std; // 可选,避免每次写 std::

2. 字符串的初始化

string s1;              // 默认初始化,空字符串 ""
string s2("Hello");     // 用 C 风格字符串初始化
string s3 = "World";    // 赋值初始化

3. 字符串的基本操作
(1) 访问字符:使用 `[]` 或 `at()` 访问单个字符:

string s = "Hello";
  cout << s[0];       // 'H'(不检查越界)
  cout << s.at(1);    // 'e'(越界会抛出 std::out_of_range)

(2) 获取字符串长度

string s = "Hello";
cout << s.size();     // 5
cout << s.length();   // 5(与 size() 相同)
cout << s.empty();    // false(如果字符串为空返回 true)

(3) 字符串比较:使用 ==, !=,  <,  >,  <=,  >=:

string a = "abc";
string b = "def";
if (a < b)      cout << "a < b";   // 按字典序比较
if(a[0] > a[1]  cout<<1<<endl;

(4) 子字符串操作:substr(pos, len):提取子串

string s = "Hello World";
string sub = s.substr(6, 5); // sub = "World"

(5) 删除:erase(pos, len):删除子串

s.erase(5, 3); // s = "Hello C++"

4. 字符串遍历:
(1) 使用下标遍历

for (size_t i = 0; i < s.size(); i++) {
    cout << s[i];
}

(2) 使用迭代器遍历

for (auto it = s.begin(); it != s.end(); it++) {
    cout << *it;
}


总结
- std::string 比 C 风格字符串更安全、更易用。
- 支持动态扩容,无需手动管理内存。
- 提供了丰富的成员函数(find, substr, replace, append 等)。
- 适用于大多数字符串操作场景。


通过率

统 计

 提交 179
 正确 110
 格式错误 0
 答案错误 38
 时间超限 0
 内存超限 0
 输出超限 0
 运行错误 3
 编译错误 28