題解——P1553 數字反轉(升級版)(字符串)

這道題是不是難倒小夥伴們啦哈哈哈,這個升級版有點坑,思路比較簡單,但是代碼實現比較麻煩,小孱弱弱不才,犯了好多錯誤才AC,哈哈哈,沒事,我的方法註定是大多數人能理解的,下面我們說一說:
———首先呢,它有四種情況:百分數(百分號-%),小數(小數點-.),分數(除號-/)整數 ,我們可以大致分成兩類,百分數和整數一類,小數和分數一類。
———先說整數,很簡單STL中的reserve+迭代器,輕鬆解決,然後去掉前導零就歐克了,至於百分數嘛,百分數一定是在字符串的最後一位,一定要保留下來,反轉後加上%,然後去掉前導零,歐克了。
———小數和分數,先遍歷字符串,用一個變量記住符號位的位置,然後將前半部分和後半部分分別像處理整數那樣,然後整合到原始字符串輸出即可。簡單不,高興的有點早哈哈哈,後面就來坑了,所有的部分都可能是0,我就因爲這個掐住兩次,嗚嗚嗚嗚
———今天看到一句話感覺不錯:凡爲過往,皆爲序章,承認失敗,砥礪前行!!最爲最文藝的小哥哥我,當然若有所思哈哈哈哈哈哈哈
上代碼:

#include <iostream>
#include <algorithm>
using namespace std; 
string str;
	
void fun1(int n)
{
	if(n==1||n==2)//小數或者除號 
	{
		int p;
		for(int i=0;i<str.size();i++)
		{
			if(str[i]=='.'||str[i]=='/')
			{
				p=i;
				break;
			}
		} 
		string temp1(str.begin(),str.begin()+p);
		string temp2(str.begin()+p+1,str.end());
		string a(str,p,1);
		if(temp1!="0")
			while(temp1[0]=='0')
				temp1.erase(temp1.begin());
		if(temp2!="0")
			while(temp2[0]=='0')
				temp2.erase(temp2.begin());
		reverse(temp1.begin(),temp1.end()); 
		reverse(temp2.begin(),temp2.end()); 
//		cout<<temp1<<' '<<temp2<<endl;
		if(temp1!="0")
			while(temp1[0]=='0')
				temp1.erase(temp1.begin());
		if(temp2!="0")
			while(temp2[0]=='0')
				temp2.erase(temp2.begin());
		str.clear();
		str.append(temp1);
		str.append(a);
		str.append(temp2);
//		cout<<temp1<<' '<<temp2<<endl;
	} 
	if(n==3)//無符號 
	{
		if(str=="0%")
		{
			cout<<"0%";
			return ;
		}
		while(str[0]=='0')
			str.erase(str.begin());
		reverse(str.begin(),str.end()-1); 
		while(str[0]=='0')
			str.erase(str.begin());
	}
	if(n==4)//百分號 
	{
		while(str[0]=='0')
			str.erase(str.begin());
		reverse(str.begin(),str.end()); 
		while(str[0]=='0')
			str.erase(str.begin());
	}
	cout<<str;
		
}
int main()
{
	cin>>str;
	for(int i=0;i<str.size();i++)
	{
		if(str=="0")
		{
			cout<<0;
			return 0;
		}
		if(str[i]=='%')
		{
			fun1(3);
			return 0;
		}
		else if(str[i]=='.')
		{
			fun1(1);
			return 0;
		}
		else if(str[i]=='/')
		{
			fun1(1);
			return 0;
		}
		
	} 
	fun1(4);
	
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章