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

· · 题解

P1553 题解:

主要思路:

其实这题并不难,就是按题面模拟就行了。

::::warning[注意]{open} 小数部分的前导零从后往前查,分母的前导零从前往后查,这两个容易搞混。 ::::

代码实现:

主要操作:

::::info[翻转]{open} 用 STL 自带的 reverse 函数实现翻转。

reverse(s.begin(),s.end());

不了解 reverse 函数的点这里。 :::: ::::info[去除前导零]{open}

        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];
        }

用变量 k 存储第一个非零字符的下标,在从 k 开始循环输出字符串即可。 ::::

知道了这些就可以写完整代码了。

代码有点长,请耐心阅读。

AC Code:

#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;
}

感谢阅读。

最后,留个赞再走吧。