C++ (字符串) 数字反转(升级版)

https://www.luogu.com.cn/problem/P1553

        这题主要就是要学会使用字符串的一些操作,比如find(),还有用到algorithm库的reverse函数进行反转比较方便。稍微难一点的地方我觉得就在于有几个比较刁钻的测试点不好找,因为刷题少所以没有注意到,还得多谢袁老师,比如 0 , 0.0 , 0/1 , 0% 这几个点。

#include<string>
#include<iostream>
#include<algorithm>
using namespace std;

void inter(string a);//整数反转
void decimal(string a); //小数反转
void fraction(string a);//分数反转
void percent(string a);//百分数反转

int main()
{
	string num;
	
	cin >> num;
	
	if(num.length() == 1) {
		cout<<num; 
		return 0;
	}
	
	if(num.find('.') != string::npos)
	{
			decimal(num);
	}
	else if(num.find('/') != string::npos)
	{
		fraction(num);
	}else if(num.find('%') != string::npos)
	{
		percent(num);
	}else{
		inter(num);
	}
	
	return 0;
} 

void inter(string a)
{
	long long i;
	reverse(a.begin(),a.end());
	
	for(i=0; a[i] == '0' && i<a.length(); i++);
	for(int j=i; j<a.length(); j++)
		cout<<a[j];
}

void decimal(string a)
{
	int k,i,j;
	string s1,s2;
	
	k=a.find('.');
	reverse(a.begin(),a.begin()+k);
	reverse(a.begin()+k+1,a.end());
	
	//输出小数点前部分
	for(i=0; a[i] == '0' && i<a.length() ;i++);
	if(a[i] == '.') cout<<'0';  //处理小数点前面为0的情况
	for(j=i; j<k+1; j++)
		cout<<a[j];
	//输出小数点后部分
	for(i=a.length()-1; a[i] == '0' && i>k+1; i--);
	for(j=k+1; j<i+1; j++)
		cout<<a[j];
	
}

//跟小数的处理方法类似
void fraction(string a)
{
	long long k,i,j;
	string s1,s2;
	
	k=a.find('/');
	reverse(a.begin(),a.begin()+k);
	reverse(a.begin()+k+1,a.end());
	

	for(i=0; a[i] == '0' && i<a.length() ;i++);
	if(a[i] == '/') cout<<'0';   //处理0/1这种分子为0的情况
	for(j=i; j<k+1; j++)
		cout<<a[j];

	for(i=k+1; a[i] == '0' && i<a.length() ;i++);
	for(j=i; j<a.length(); j++)
		cout<<a[j];
}

void percent(string a)
{
	long long i;
	reverse( a.begin(),a.end()-1 );
	
	for(i=0; a[i] == '0' && i<a.length(); i++);
	if(a[i] == '%') cout<<'0';
	for(int j=i; j<a.length(); j++)
		cout<<a[j];
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值