1 条题解
-
0
练35.3 大大大
解题思路
字符串读取纯小数,截取小数点后部分,去掉前导零后输出;若全部为0则输出0。相当于不断乘10直到得到整数,避免浮点误差。
正确性说明
按上述推导执行:每次仅处理当前输入或当前步骤,并把它对答案的贡献计入对应状态。所有需要处理的情况均被覆盖,结束时保存的量就是题目所求。
易错点
不能用浮点while循环判断是否整数,二进制误差可能无法结束;小数末尾的零不必作为整数位保留,因此先删除无意义末尾零。
复杂度
输入L位,时间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; cin >> s; size_t p = s.find('.'); string t = p == string::npos ? "0" : s.substr(p + 1); while (t.size() > 1 && t.back() == '0') t.pop_back(); p = t.find_first_not_of('0'); cout << (p == string::npos ? "0" : t.substr(p)) << "\n"; return 0; }
- 1