• 【PAT甲级】1060 Are They Equal (25 分)(需注意细节的模拟)


    题意:

    输入一个正整数N(<=100),接着输入两个浮点数(可能包含前导零,对于PAT已经习惯以string输入了,这点未知),在保留N位有效数字的同时判断两个数是否相等,并以科学计数法输出。

    trick:

    测试点3含有有效数字在小数点以后的数据,此时指数应该是小数点位置减有效数字位置再加上1。

    AAAAAccepted code:

     1 #define HAVE_STRUCT_TIMESPEC
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 string a,b;
     5 int ans_a[107],ans_b[107];
     6 int main(){
     7     ios::sync_with_stdio(false);
     8     cin.tie(NULL);
     9     cout.tie(NULL);
    10     int n;
    11     cin>>n;
    12     cin>>a>>b;
    13     int cnt=0;
    14     int posa=a.size();
    15     int posb=b.size();
    16     int staa=a.size();
    17     int stab=b.size();
    18     for(int i=0;i<a.size();++i)if(a[i]=='.'){
    19         posa=i;
    20         break;
    21     }
    22     for(int i=0;i<b.size();++i)if(b[i]=='.'){
    23         posb=i;
    24         break;
    25     }
    26     for(int i=0;i<a.size();++i)if(a[i]!='0'&&a[i]!='.'){
    27         staa=i;
    28         break;
    29     }
    30     for(int i=0;i<b.size();++i)if(b[i]!='0'&&b[i]!='.'){
    31         stab=i;
    32         break;
    33     }
    34     for(int i=staa;i<a.size();++i){
    35         if(a[i]=='.')
    36             continue;
    37         if(cnt<n)
    38             ans_a[++cnt]=a[i]-'0';
    39     }
    40     for(int i=cnt+1;i<=n;++i)
    41         ans_a[i]=0;
    42     int tot=0;
    43     for(int i=stab;i<b.size();++i){
    44         if(b[i]=='.')
    45             continue;
    46         if(tot<n)
    47             ans_b[++tot]=b[i]-'0';
    48     }
    49     for(int i=tot+1;i<=n;++i)
    50         ans_b[i]=0;
    51     int flag=0;
    52     for(int i=1;i<=n;++i)if(ans_a[i]!=ans_b[i])
    53         flag=1;
    54     if(!flag&&posa-staa==posb-stab||staa==a.size()&&stab==b.size())
    55         cout<<"YES ";
    56     else
    57         cout<<"NO ";
    58     cout<<"0.";
    59     for(int i=1;i<=n;++i)
    60         cout<<ans_a[i];
    61     int ans=0;
    62     if(posa-staa<0)
    63         ans=posa-staa+1;
    64     else
    65         ans=posa-staa;
    66     if(staa==a.size())
    67         ans=0;
    68     cout<<"*10^"<<ans;
    69     if((flag||posa-staa!=posb-stab)&&(staa!=a.size()||stab!=b.size())){
    70         cout<<" 0.";
    71         for(int i=1;i<=n;++i)
    72             cout<<ans_b[i];
    73         int anss=0;
    74         if(posa-staa<0)
    75             anss=posb-stab+1;
    76         else
    77             anss=posb-stab;
    78         if(stab==b.size())
    79             anss=0;
    80         cout<<"*10^"<<anss;
    81     }
    82     return 0;
    83 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    「笔记」高斯消元
    函数库
    数学公式杂记
    CF1290E Cartesian Tree
    洛谷 P4027 [NOI2007] 货币兑换
    审计ThinkCMF框架任意内容包含漏洞与复现
    PHP代码审计笔记(基础篇)--命令执行漏洞
    某校园缴费平台通用0day偶然发现之路
    【转】教育src挖掘经验
    近期学习文章的整理(超级干货总结分享)
  • 原文地址:https://www.cnblogs.com/ldudxy/p/11682024.html
Copyright © 2020-2023  润新知