有点小坑,一开始我以为找到最大数字然后把尾部的 0 去掉就行了。这是错的,反例是 9899,正解为 99 而不是 9899。
经过思考,发现只要找到 [ptr, end) 最大就行,然后把尾部的 0 去掉。
[ptr, end)
#include <iostream> #include <string> using namespace std; int main() { std::string s; std::cin >> s; auto crnt_max = &s[0]; for (auto i = &s[1]; *i != '\0'; ++i) if (strcmp(crnt_max, i) < 0) crnt_max = i; auto ed = &*s.end(); while (*(ed - 1) == '0') --ed; if (crnt_max == ed) std::cout << "0\n"; else for (auto i = crnt_max; i != ed; ++i) cout << *i; }
有点小坑,一开始我以为找到最大数字然后把尾部的 0 去掉就行了。这是错的,反例是 9899,正解为 99 而不是 9899。
经过思考,发现只要找到
[ptr, end)
最大就行,然后把尾部的 0 去掉。