1 条题解
-
0
【例72.2】 取出整数的一部分
解题思路
用字符串保留n。若|k|大于位数输出Error;k>0截前k位,k<0截后-k位,k=0全部保留。结果转标准数字串去前导零。
正确性说明
依题目给出的对应关系逐项处理,位置与原输入保持明确对应。每一步完成当前项的全部贡献,结束后得到所有位置或字符的目标结果。
易错点
负k不是倒序截取,只取后缀原顺序;全零输出0。
复杂度
时间O(L),空间O(L)。
参考代码(C++11)
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); string s; int k; cin >> s >> k; if (abs(k) > int(s.size())) { cout << "Error\n"; return 0; } string t = k > 0 ? s.substr(0, k) : k < 0 ? s.substr(s.size() + k) : s; size_t p = t.find_first_not_of('0'); cout << (p == string::npos ? "0" : t.substr(p)) << "\n"; return 0; }
- 1