1060 Are They Equal (25 分)难度: 一般 / 知识点: 模拟 字符串处理

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1060 Are They Equal (25 分)难度: 一般 / 知识点: 模拟 字符串处理相关的知识,希望对你有一定的参考价值。


https://pintia.cn/problem-sets/994805342720868352/problems/994805413520719872
细节很多,需要注意一下几个情况:

  • 12345000 全是整数的情况
  • 000012313 全是整数有前导零的情况
  • 123.456 既有整数,又有小数的情况
  • 0.00001323 只有小数的情况
  • 0 这种情况
  • 0.00000 这种情况
#include<bits/stdc++.h>
using namespace std;
int n,len1,len2;
string a,b,s1,s2;
int get(string& s,string& ans)
{
    if(s.find('.')==-1)//整数
    {
        while(s.size()>1&&s[0]=='0') s=s.substr(1);
        for(int i=0;i<s.size();i++)
        {
            if(s[i]!='.') ans+=s[i];
            else break;
            if(ans.size()==n) break;
        }
        while(ans.size()<n) ans="0"+ans;
        if(s[0]=='0') return 0;//说明是0
        return s.size();
    }else
    {
        int k=s.find('.');
        bool flag=0;
        for(int i=0;i<k;i++) if(s[i]!='0') flag=1;//说明" .  "前边有数
        if(flag)//前整,后小数
        {
            while(s[0]=='0') s=s.substr(1);
            for(int i=0;i<s.size();i++)
            {
                if(s[i]!='.') ans+=s[i];
                if(ans.size()==n) break;
            }
            while(ans.size()<n) ans=ans+"0";
            return s.find('.');
        }else//全是小数
        {
            s=s.substr(s.find('.')-1);
            int cnt=2;
            while(s[cnt]=='0'&&cnt<s.size()) cnt++;
            for(int i=cnt;i<s.size();i++)
            {
                ans+=s[i];
                if(ans.size()==n) break;
            }
            while(ans.size()<n) ans=ans+"0";
            if(cnt==s.size()) return 0;///0.0000000这种情况
            return -(cnt-2);
        }
    }
}
int main(void)
{
    cin>>n>>a>>b;
    len1=get(a,s1);
    len2=get(b,s2);
    if(s1==s2&&len1==len2) printf("YES 0.%s*10^%d",s1.c_str(),len1);
    else printf("NO 0.%s*10^%d 0.%s*10^%d",s1.c_str(),len1,s2.c_str(),len2);
    return 0;
}

以上是关于1060 Are They Equal (25 分)难度: 一般 / 知识点: 模拟 字符串处理的主要内容,如果未能解决你的问题,请参考以下文章

PAT Advanced 1060 Are They Equal (25分)

A1060 Are They Equal (25 分)

1060 Are They Equal (25 分)难度: 一般 / 知识点: 模拟 字符串处理

PAT 甲级 1060 Are They Equal (25 分)(科学计数法,接连做了2天,考虑要全面,坑点多,真麻烦)

1060. Are They Equal (25)

1060. Are They Equal (25)