题解:P1553 数字反转(升级版)
P1553 题解:
主要思路:
其实这题并不难,就是按题面模拟就行了。
::::warning[注意]{open} 小数部分的前导零从后往前查,分母的前导零从前往后查,这两个容易搞混。 ::::
代码实现:
主要操作:
::::info[翻转]{open}
用 STL 自带的 reverse 函数实现翻转。
reverse(s.begin(),s.end());
不了解 reverse 函数的点这里。
::::
::::info[去除前导零]{open}
int k=0;
for(int i=0;i<s.size();i++){
if(s[i]!='0'){
k=i;
break;
}
}
for(int i=k;i<s.size();i++){
cout<<s[i];
}
用变量
知道了这些就可以写完整代码了。
代码有点长,请耐心阅读。
AC Code:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
char f='0';
int num,h;
cin>>s;
bool b[s.size()]={false};
for(int i=0;i<s.size();i++){
if(s[i]>='0'&&s[i]<='9') num++;
else{
f=s[i];
h=i;
break;
}
}
if(f=='0'){
reverse(s.begin(),s.end());
int k=0;
for(int i=0;i<s.size();i++){
if(s[i]!='0'){
k=i;
break;
}
}
for(int i=k;i<s.size();i++){
cout<<s[i];
}
return 0;
}
else if(f=='.'){
string t1,t2;
for(int i=0;i<h;i++){
t1+=s[i];
}
reverse(t1.begin(),t1.end());
int k=0;
for(int i=0;i<t1.size();i++){
if(t1[i]!='0'){
k=i;
break;
}
}
for(int i=k;i<t1.size();i++){
cout<<t1[i];
}
cout<<f;
for(int i=h+1;i<s.size();i++){
t2+=s[i];
}
reverse(t2.begin(),t2.end());
k=0;
for(int i=t2.size()-1;i>=0;i--){
if(t2[i]!='0'){
k=i;
break;
}
}
for(int i=0;i<=k;i++){
cout<<t2[i];
}
return 0;
}
else if(f=='%'){
string t1;
for(int i=0;i<s.size()-1;i++){
t1+=s[i];
}
reverse(t1.begin(),t1.end());
int k=0;
for(int i=0;i<t1.size();i++){
if(t1[i]!='0'){
k=i;
break;
}
}
for(int i=k;i<t1.size();i++){
cout<<t1[i];
}
cout<<f;
return 0;
}
else if(f=='/'){
string t1,t2;
for(int i=0;i<h;i++){
t1+=s[i];
}
reverse(t1.begin(),t1.end());
int k=0;
for(int i=0;i<t1.size();i++){
if(t1[i]!='0'){
k=i;
break;
}
}
for(int i=k;i<t1.size();i++){
cout<<t1[i];
}
cout<<f;
for(int i=h+1;i<s.size();i++){
t2+=s[i];
}
reverse(t2.begin(),t2.end());
k=0;
for(int i=0;i<t2.size();i++){
if(t2[i]!='0'){
k=i;
break;
}
}
for(int i=k;i<t2.size();i++){
cout<<t2[i];
}
return 0;
}
return 0;
}
感谢阅读。
最后,留个赞再走吧。