• PAT (Advanced Level) 1060. Are They Equal (25)


    模拟题。坑点较多。

    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<cstdio>
    #include<map>
    #include<queue>
    #include<string>
    #include<stack>
    #include<vector>
    using namespace std;
    
    int n;
    string s,t;
    struct X
    {
        string f;
        int idx;
    } ans[5];
    
    string change(string a)
    {
        string res;
        if(a.length()-2<n)
        {
            for(int i=a.length()-2;i<n;i++) a=a+"0";
            res=a;
        }
    
        else if(a.length()-2>n)
        {
            res="0.";
            for(int i=2;i<n+2;i++) res=res+a[i];
        }
        else res=a;
        return res;
    }
    
    string qu(string a)
    {
        string res;
        if(a.length()==1&&a[0]=='0') return a;
    
        int pos=-1;
        for(int i=0; i<a.length(); i++) if(a[i]=='.') pos=i;
    
        if(pos==-1)
        {
            for(int i=0; i<a.length(); i++)
            {
                if(a[i]=='0') continue;
                else
                {
                    for(int j=i; j<a.length(); j++) res=res+a[j];
                    break;
                }
            }
        }
        else
        {
            for(int i=0; i<pos-1; i++)
            {
                if(a[i]=='0') continue;
                else
                {
                    for(int j=i; j<pos-1; j++) res=res+a[j];
                    break;
                }
            }
            for(int i=pos-1; i<a.length(); i++) res=res+a[i];
        }
    
        if(res.length()==0) res="0";
        return res;
    }
    
    void R(int a)
    {
        bool ling=1;
        for(int i=0; i<ans[a].f.length(); i++)
        {
            if(ans[a].f[i]=='.') continue;
            if(ans[a].f[i]!='0') ling=0;
        }
    
        if(ling) ans[a].idx=0;
    }
    
    void PUT(int a)
    {
        cout<<ans[a].f<<"*10^"<<ans[a].idx;
    }
    
    int main()
    {
        scanf("%d",&n);
        cin>>s>>t;
    
        s=qu(s);
        t=qu(t);
    
        if(s[0]=='0'&&s[1]=='.')
        {
            int num=0;
            for(int i=2; i<s.length(); i++)
            {
                if(s[i]=='0') num++;
                else
                {
                    ans[0].idx=-num;
                    ans[0].f="0.";
                    for(int j=i; j<s.length(); j++) ans[0].f=ans[0].f+s[j];
                    break;
                }
            }
            if(ans[0].f.length()==0)
            {
                ans[0].f="0.0";
                ans[0].idx=0;
            }
        }
    
        else
        {
            int pos=-1;
            for(int i=0; i<s.length(); i++) if(s[i]=='.') pos=i;
            if(pos!=-1)
            {
                ans[0].f="0.";
                for(int i=0; i<s.length(); i++) if(s[i]!='.') ans[0].f=ans[0].f+s[i];
                ans[0].idx=pos;
            }
            else
            {
                ans[0].f="0."+s;
                ans[0].idx=s.length();
            }
        }
    
        ans[0].f=change(ans[0].f);
    
        if(t[0]=='0'&&t[1]=='.')
        {
            int num=0;
            for(int i=2; i<t.length(); i++)
            {
                if(t[i]=='0') num++;
                else
                {
                    ans[1].idx=-num;
                    ans[1].f="0.";
                    for(int j=i; j<t.length(); j++) ans[1].f=ans[1].f+t[j];
                    break;
                }
            }
            if(ans[1].f.length()==0)
            {
                ans[1].f="0.0";
                ans[1].idx=0;
            }
        }
        else
        {
            int pos=-1;
            for(int i=0; i<t.length(); i++) if(t[i]=='.') pos=i;
            if(pos!=-1)
            {
                ans[1].f="0.";
                for(int i=0; i<t.length(); i++) if(t[i]!='.') ans[1].f=ans[1].f+t[i];
                ans[1].idx=pos;
            }
            else
            {
                ans[1].f="0."+t;
                ans[1].idx=t.length();
            }
        }
    
        ans[1].f=change(ans[1].f);
    
        R(0); R(1);
    
        if(ans[0].f==ans[1].f&&ans[0].idx==ans[1].idx)
        {
            printf("YES ");
            PUT(0);
        }
    
        else
        {
            printf("NO ");
            PUT(0);
            cout<<" ";
            PUT(1);
            cout<<endl;
        }
    
        return 0;
    }
  • 相关阅读:
    C# 反射数据库数据过程中值类型存在DBNull的处理方法 == System.DBNull.Value
    Git 未能顺利结束 (退出码 128)解决办法 git常用命令流程图
    IDEA之The directory xxxxx is under Git, but is not registered in the Settings.
    git push提交成功后如何撤销回退 我是手动修改再提交一次 。。或者IDEA有代码修改历史记录功能 进行回退
    IDEA,发现Project文件目录不见了,只剩External Libraries的原因
    分布式事务 seata
    idea设置类,方法模板 阿里检测
    随笔
    初学一点点空间分解和有理标准型
    Vue2+Cesium1.9+热力图开发笔记
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5551863.html
Copyright © 2020-2023  润新知