1 条题解

  • 0
    @ 2025-8-24 21:26:24

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar SebMa
    **

    搬运于2025-08-24 21:26:23,当前版本为作者最后更新于2017-11-15 20:30:04,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    错了好几次才AC;QAQ

    细节太多,要周密考虑!

    我的大概思路如下;

    分成两块,先输出前一个数,判断有无符号,无return0,有再输出第二个数;

    代码较简单,30行,供参考:

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        string s;
        char p=0;//放符号 
        int cnt=0; 
        cin>>s;
        for(int i=0;i<s.size();i++)
        {
            if(s[i]>='0'&&s[i]<='9') cnt++;//记录第一个数长度
            else    //遇到符号,记录,跳出 
            {
                p=s[i];
                break;
            } 
        }
        int x=cnt;//记下第一个数末后一个的位置,也就是符号的位置,如果是分数或小数就要用 
        cnt--;
        while(s[cnt]=='0'&&cnt>0) cnt--;//去除多余前导0; 
        for(int i=cnt;i>=0;i--)//输出第一个数 
           cout<<s[i];
        if(p==0) return 0;//无符号return 0 
        else
          if(p=='%') {cout<<p;return 0;} 
          else cout<<p;//其他继续 
        int m=s.size()-1;
        while(s[x+1]=='0'&&x<m-1) x++;//去除末尾0 
        while(s[m]=='0'&&m>x+1) m--; //去除多余前导0
        for(int i=m;i>x;i--)//输出第二个数 
            cout<<s[i];
        return 0; 
    }
    ###第一次写题解,求过。
    
    • 1

    信息

    ID
    546
    时间
    1000ms
    内存
    125MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者