75求调,悬关
查看原帖
75求调,悬关
965292
3Luby3楼主2024/9/26 22:05

提前解释一下:

这里的 beforebefore 是在符号之前的数(如果是整数和百分数就没有 afterafter 只有 beforebefore

反之亦然(afterafter

用的是字符串操作。

#include<bits/stdc++.h>
#define int long long
using namespace std;
string s;
string before,after;
int flag=0,t;
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>s;
	for(int i=0;i<s.size();i++){
		if(s[i]=='%'){
			flag=3;
			break;
		}
		if(s[i]=='.' || s[i]=='/'){
			if(s[i]=='.') flag=1;
			else flag=2;
			t=i;
			break;
		}
		before+=s[i];
	}
	if(flag==1 || flag==2){
		for(int i=t+1;i<s.size();i++) after+=s[i];
	}
	if(flag==0 || flag==3){ 
		if(before=="0"){
			if(flag==0){
				cout<<0;
				return 0;
			}else{
				cout<<0<<"%";
				return 0;
			}
		}
		reverse(before.begin(),before.end());
		int x=0;
		while(before[x]=='0') x++;
		for(int i=x;i<before.size();i++) cout<<before[i];
		if(flag==3) cout<<"%";
	}
	else if(flag==1 || flag==2){
		reverse(before.begin(),before.end());
		int x=0;
		while(before[x]=='0') x++;
		for(int i=x;i<before.size();i++) cout<<before[i];
		if(after=="0") return 0;
		if(flag==1){
			cout<<".";
			x=after.size();
			int sum=0;
			while(after[--x]=='0') sum++;
			reverse(after.begin(),after.end());
			cout<<after.substr(0,after.size()-sum-1);
		}
		else{
			cout<<"/";
			reverse(after.begin(),after.end());
			for(int i=x;i<after.size();i++){
				cout<<after[i];
			}	
		}
	}
	return 0;
}
2024/9/26 22:05
加载中...