很久之前没解决的问题…
给你一个百分数,整数,小数或者分数,要你给他反转过来
做这个题目,要知道stl函数,reverse(反转函数),erase(删除字符),substr(复制字符串)我是把长字符串分成俩部分做的
#include<iostream>
#include<stdio.h>
#include<string>
#include<algorithm>
using namespace std;
int fkq(string &a)// 去掉前导0
{
int len=a.size();
for(int x=0;x<len;x++)
{
if(a[x]=='0')
{
a.erase(x,1);
x--;
}
else
break;// 一旦不是0就跳出
}
if(a.size()==0)//全是0的话就保留一个0,因为10.0反转要输出1.0
{
a="0";
}
}
int fkh(string &a) //去掉后边的0,模仿前边,从后边开始
{
int len=a.size();
for(int x=len-1;x>=0;x--)
{
if(a[x]=='0')
{
a.erase(x,1);
}
else
break;
}
if(a.size()==0)
{
a="0";
}
}
int main()
{
string a,a1,a2;// 要用函数,肯定用字符串读入比较好
char point='*';// 判断是整数还是其他的
cin>>a;
int len=a.size();
for(int x=0;x<len;x++)
{
if(a[x]=='/'||a[x]=='%'||a[x]=='.')
{
point=a[x];
a1=a.substr(0,x); //俩部分
a2=a.substr(x+1,len-x);
break;
}
if(x==len-1)// 到最后也没发现标点,说明是整数
{
a1=a;
}
}
fkh(a2); //先去后面一部分的后面的0,因为100.100输出是1.1
reverse(a1.begin(),a1.end());
reverse(a2.begin(),a2.end());
fkq(a1);
fkh(a2);
if(point=='%')//分类输出
{
cout<<a1<<'%';
}
else
if(point=='*')
{
cout<<a1;
}
else
cout<<a1<<point<<a2;
return 0;
}
改进之后应该可以更简单的,不过我就懒得改了…