PAT甲级 Are They Equal (25) (恶心模拟)
Posted 1013star
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT甲级 Are They Equal (25) (恶心模拟)相关的知识,希望对你有一定的参考价值。
Are They Equal (25)
时间限制 1000 ms 内存限制 65536 KB 代码长度限制 100 KB
题目描述
If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered equal since they are both saved as 0.123*105 with simple chopping. Now given the number of significant digits on a machine and two float numbers, you are supposed to tell if they are treated equal in that machine.
输入描述:
Each input file contains one test case which gives three numbers N, A and B, where N (<100) is the number of significant digits, and A and B are the two float numbers to be compared. Each float number is non-negative, no greater than 10100, and that its total digit number is less than 100.
输出描述:
For each test case, print in a line "YES" if the two numbers are treated equal, and then the number in the standard form "0.d1...dN*10^k" (d1>0 unless the number is 0); or "NO" if they are not treated equal, and then the two numbers in their standard form. All the terms must be separated by a space, with no extra space at the end of a line.
Note: Simple chopping is assumed without rounding.
输入例子:
3 12300 12358.9
输出例子:
YES 0.123*10^5
题解:
这个题关键不在于各种分情况讨论,而是如何找到有效数位
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int n; 7 string s1,s2; 8 struct node 9 string ss; 10 int kk; 11 e; 12 node judge(string s) 13 14 int flag=0; 15 int len=s.length(); 16 int k=0; 17 string ans=""; 18 for(int i=0;i<len;i++) 19 20 if(s[i]==‘.‘) 21 flag=1; 22 else 23 24 if(!flag) 25 k++; 26 if(ans==""&&s[i]==‘0‘) 27 28 k--; 29 30 else 31 32 ans+=s[i]; 33 34 35 36 37 while(ans.length()<n) 38 ans+=‘0‘; 39 if(ans.length()>n) 40 ans=ans.substr(0,n); 41 // cout<<"ans="<<ans<<endl; 42 int ok=0; 43 for(int i=0;i<ans.length();i++) 44 45 if(ans[i]!=‘0‘) 46 47 ok=1; 48 break; 49 50 51 if(!ok) 52 k=0; 53 e.ss=ans; 54 e.kk=k; 55 return e; 56 57 int main() 58 59 cin>>n>>s1>>s2; 60 node ans1=judge(s1); 61 node ans2=judge(s2); 62 if(ans1.ss==ans2.ss&&ans1.kk==ans2.kk) 63 64 cout<<"YES "<<"0."<<ans1.ss<<"*10^"<<ans1.kk<<endl; 65 66 else 67 68 cout<<"NO "<<"0."<<ans1.ss<<"*10^"<<ans1.kk<<" "<<"0."<<ans2.ss<<"*10^"<<ans2.kk<<endl; 69 70 return 0; 71
以上是关于PAT甲级 Are They Equal (25) (恶心模拟)的主要内容,如果未能解决你的问题,请参考以下文章
PAT 甲级 1060 Are They Equal (25 分)(科学计数法,接连做了2天,考虑要全面,坑点多,真麻烦)
PAT Advanced 1060 Are They Equal (25分)