本文最后更新于:2022年6月20日 晚上
输入一个正整数的字符串,输出与它最接近的对称数字(不包括它自己)的字符串
注1: 输入字符串的长度最多不会超过18
注2: 当大于输入数字和小于输入数字的对称数字与输入数字距离相同时,取小的数字作为答案
输入:
123
输出:
121
字符串常用函数:
- reverse(s.begin(),s.end()); 翻转字符串s
- replace(int pos, int len, string str); 用str字符串替换从 pos 起始位置起,长度为len的字符
- substr(int index, int num); 返回从index位置起,长num个字符; 不加第二个参数num则返回从index开始的剩余的字符串。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| #include<bits/stdc++.h> using namespace std; typedef long long LL;
bool isValid(string s) { bool flag = true; if (s[0] != '1') flag = false; if (s[0] == '1') { for (unsigned int i = 1; i < s.size(); i++) { if (s[i] != '0') { flag = false; break; } } } return flag; }
int main() { string s; cin >> s; if (s.size() <= 1) { cout << s; return 0; } if (isValid(s)) { string r = ""; while (r.size() < s.size()-1) r += "9"; cout << r; return 0; } string str = s; reverse(s.begin(), s.end()); int n = s.size(); string substr = s.substr(n/2+1); str.replace(n/2+1, n, substr); cout << str << endl; return 0; }
|
参考题解:
链接:https://www.nowcoder.com/questionTerminal/e605ba77112b425889bee3f40481fe93
来源:牛客网