专栏文章

题解:P1553 数字反转(升级版)

P1553题解参与者 3已保存评论 2

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
2 条
当前快照
1 份
快照标识符
@mioax7xv
此快照首次捕获于
2025/12/02 16:13
3 个月前
此快照最后确认于
2025/12/02 16:13
3 个月前
查看原文

P1553 题解:

主要思路:

其实这题并不难,就是按题面模拟就行了。
注意
小数部分的前导零从后往前查,分母的前导零从前往后查,这两个容易搞混。

代码实现:

主要操作:

翻转
用 STL 自带的 reverse 函数实现翻转。
CPP
reverse(s.begin(),s.end());
去除前导零CPP
		int k=0;
  	for(int i=0;i<s.size();i++){
  		if(s[i]!='0'){
  			k=i;
  			break;
  		}
  	}
  	for(int i=k;i<s.size();i++){
  		cout<<s[i];
  	}
用变量 kk 存储第一个非零字符的下标,在从 kk 开始循环输出字符串即可。
知道了这些就可以写完整代码了。
代码有点长,请耐心阅读。
AC Code:
CPP
#include<bits/stdc++.h>
using namespace std;
int main(){
	string s;
	char f='0';
	int num,h;
	cin>>s;
	bool b[s.size()]={false};
	for(int i=0;i<s.size();i++){
		if(s[i]>='0'&&s[i]<='9') num++;
		else{
			f=s[i];
			h=i;
			break;
		}
	}
	if(f=='0'){
		reverse(s.begin(),s.end());
		int k=0;
		for(int i=0;i<s.size();i++){
			if(s[i]!='0'){
				k=i;
				break;
			}
		}
		for(int i=k;i<s.size();i++){
			cout<<s[i];
		}
		return 0;
	}
	else if(f=='.'){
		string t1,t2;
		for(int i=0;i<h;i++){
			t1+=s[i];
		}
		reverse(t1.begin(),t1.end());
		int k=0;
		for(int i=0;i<t1.size();i++){
			if(t1[i]!='0'){
				k=i;
				break;
			}
		}
		for(int i=k;i<t1.size();i++){
			cout<<t1[i];
		}		
		cout<<f;
		for(int i=h+1;i<s.size();i++){
			t2+=s[i];
		}
		reverse(t2.begin(),t2.end());
		k=0;
		for(int i=t2.size()-1;i>=0;i--){
			if(t2[i]!='0'){
				k=i;
				break;
			}
		}
		for(int i=0;i<=k;i++){
			cout<<t2[i];
		}			
		return 0;
	}
	else if(f=='%'){
		string t1;
		for(int i=0;i<s.size()-1;i++){
			t1+=s[i];
		}
		reverse(t1.begin(),t1.end());
		int k=0;
		for(int i=0;i<t1.size();i++){
			if(t1[i]!='0'){
				k=i;
				break;
			}
		}
		for(int i=k;i<t1.size();i++){
			cout<<t1[i];
		}		
		cout<<f;
		return 0;
	}
	else if(f=='/'){
		string t1,t2;
		for(int i=0;i<h;i++){
			t1+=s[i];
		}
		reverse(t1.begin(),t1.end());
		int k=0;
		for(int i=0;i<t1.size();i++){
			if(t1[i]!='0'){
				k=i;
				break;
			}
		}
		for(int i=k;i<t1.size();i++){
			cout<<t1[i];
		}		
		cout<<f;
		for(int i=h+1;i<s.size();i++){
			t2+=s[i];
		}
		reverse(t2.begin(),t2.end());
		k=0;
		for(int i=0;i<t2.size();i++){
			if(t2[i]!='0'){
				k=i;
				break;
			}
		}
		for(int i=k;i<t2.size();i++){
			cout<<t2[i];
		}			
		return 0;		
	}
	return 0;
}
感谢阅读。
最后,留个赞再走吧。

评论

2 条评论,欢迎与作者交流。

正在加载评论...