【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 }
保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
原文地址:https://www.cnblogs.com/ldudxy/p/11682024.html