专栏文章
题解:P1553 数字反转(升级版)
P1553题解参与者 3已保存评论 2
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mioax7xv
- 此快照首次捕获于
- 2025/12/02 16:13 3 个月前
- 此快照最后确认于
- 2025/12/02 16:13 3 个月前
P1553 题解:
主要思路:
其实这题并不难,就是按题面模拟就行了。
注意
小数部分的前导零从后往前查,分母的前导零从前往后查,这两个容易搞混。
代码实现:
主要操作:
去除前导零
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];
}
用变量 存储第一个非零字符的下标,在从 开始循环输出字符串即可。
知道了这些就可以写完整代码了。
代码有点长,请耐心阅读。
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 条评论,欢迎与作者交流。
正在加载评论...