70分求助

P1553 数字反转(升级版)

``` #include <string> #include <iostream> #include <algorithm> // 自己写的反转函数,返回反转并去掉前导零之后的字符串 std::string reverse(std::string s) { int zeroCount = 0; std::reverse(s.begin(), s.end()); // 反转 // 范围 for 循环,用于统计前导零个数 for (auto i : s) if (i == 48) ++zeroCount; else break; s.erase(s.begin(), s.begin() + zeroCount); return (s != "" ? s : "0"); // 特判 } // 用于去掉后导零 std::string deleteTail(std::string s) { int zeroCount = 0; for (int i = s.size() - 1; i >= 0; --i) if (s[i] == 48) ++zeroCount; else break; s.erase(s.end() - zeroCount, s.end()); return (s != "" ? s : "0"); } int main() { std::string s; std::cin >> s; if (s.back() == '%') { std::cout << reverse(s.substr(0, s.size() - 1)) << "%" << std::endl; return 0; } for (auto i : s) { std::string left, right; // 其实还有一种不需要遍历字符串的做法,直接 find() 即可,但是当时没想到 if (i == '/') { left = s.substr(0, s.find("/")); right = s.substr(s.find("/") + 1); std::cout << reverse(left) << "/" << reverse(right) << std::endl; return 0; } if (i == '.') { left = s.substr(0, s.find(".")); right = s.substr(s.find(".") + 1); std::cout << reverse(left) << "." << deleteTail(reverse(right)) << std::endl; return 0; } } // 最后剩下的一种情况是正整数 std::cout << reverse(s) << std::endl; return 0; } ```
by RenSiYu6 @ 2022-10-03 19:58:16


@[18681800383cc](/user/767496) 谢了,已经AC了 ``` #include<bits/stdc++.h> using namespace std; int z,x,f,b; int main(){ string s; cin>>s; int zs=0; for(int i=0;i<s.size();i++){ if(s[i]=='.') x=1; if(s[i]=='/') f=1; if(s[i]=='%') b=1; if(s[i]!='0') zs=1; } if(!x&&!f&&!b) z=1; if(z){ if(!zs){ cout<<0; return 0; } int flag=0; for(int i=s.size()-1;i>=0;i--){ if(s[i]=='0'&&flag==0){ continue; } if(s[s.size()-1]!='0') flag=1; if(s[i+1]=='0') flag=1; cout<<s[i]; } return 0; } if(!z){ int m=0; int t=0,xx=1,ll; for(int i=0;i<s.size();i++){ if(s[i]<'0'||s[i]>'9'){ m=i; t=1; ll=m+1; continue; } if(t&&xx){ if(s[m+1]=='0'){ if(s[i]!='0'){ xx=0; ll=i; } } } } int pd=1; for(int i=0;i<m;i++){ if(s[i]!='0') pd=0; } if(!pd){ int flag=0; for(int i=m-1;i>=0;i--){ if(s[i]=='0'&&flag==0){ continue; } if(s[m-1]!='0') flag=1; if(s[i+1]=='0') flag=1; cout<<s[i]; } } if(pd) cout<<0; int flag=0; if(x) cout<<'.'; if(f) cout<<'/'; if(b) cout<<'%'; pd=1; for(int i=m+1;i<s.size();i++){ if(s[i]!='0') pd=0; } if(!pd){ for(int i=s.size()-1;i>=ll;i--){ if(s[i]=='0'&&flag==0){ continue; } if(s[s.size()-1]!='0') flag=1; if(s[i+1]=='0') flag=1; cout<<s[i]; } } if(pd&&!b) cout<<0; } } ```
by Tr_Sup @ 2022-10-03 20:26:46


|