#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
int flag;
cin>>s;
if(s[0]=='-'){
cout<<'-';
flag=1;
}
int m=s.size()-1;
while(s[m]=='0')m--;
if(flag==1){
for(int i=m;i>0;i--){
cout<<s[i];
}
}
else {
for(int i=m;i>=0;i--){
cout<<s[i];
}
}
return 0;
}
P1553 数字反转(升级版)
这题是字符串处理的题,需要注意一下情况:
整数反转是将所有数位对调。
小数反转是把整数部分的数反转,再将小数部分的数反转,不交换整数部分与小数部分。
分数反转是把分母的数反转,再把分子的数反转,不交换分子与分母。
百分数的分子一定是整数,百分数只改变数字部分。
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin>>s;
char p=0;
int cnt=0;
for(int i=0;i<s.size();i++){
if(s[i]>='0'&&s[i]<='9'){
cnt++;
}
else {
p=s[i];//找到符号就退出
break;
}
}
int x=cnt;//记录一下退出时的位置。
cnt--;//cnt是符号的位置,减掉1才是数字的位置
while(cnt>0&&s[cnt]=='0')cnt--;//去掉前导0
for(int i=cnt;i>=0;i--){
cout<<s[i];
}
if(p==0)return 0;//无符号直接退出
else {
if(p=='%'){
cout<<p;//百分数一定是整数,可以直接退出了
return 0;
}
else cout<<p;
}
int m=s.size()-1;//字符串的最后一个
while(s[x+1]=='0'&&x<m-1)x++;//去掉小数点情况下的前导0
while(s[m]=='0'&&m>x+1)m--;//去掉/情况下的前导0
for(int i=m;i>x;i--){
cout<<s[i];
}
return 0;
}