洛谷P1553 数字反转

很久之前没解决的问题…
给你一个百分数,整数,小数或者分数,要你给他反转过来
在这里插入图片描述做这个题目,要知道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;
}

改进之后应该可以更简单的,不过我就懒得改了…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值