A1060. Are They Equal (25)

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.

Input Specification:

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.

Output Specification:

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.

Sample Input 1:

3 12300 12358.9

Sample Output 1:

YES 0.123*10^5

Sample Input 2:

3 120 128

Sample Output 2:

NO 0.120*10^3 0.128*10^3
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <iostream>
 4 #include <string.h>
 5 
 6 #include <math.h>
 7 #include <algorithm>
 8 #include <vector>
 9 #include <set> 
10 #include <string>
11 
12 using namespace std;
13 int n;
14 string deal(string s,int &e)
15 {
16     
17     while(s.length()>0&&s[0]=='0')
18     {
19         s.erase(s.begin());
20     }
21     int k=0;
22     if(s[0]=='.')
23     {
24         s.erase(s.begin());
25         while(s.length()>0&&s[0]=='0')
26         {
27             s.erase(s.begin());
28             e--;
29         }     
30     }else
31     {
32         while(k<s.length()&&s[k]!='.')
33         {
34             k++;
35             e++;
36         }
37         if(k<s.length())
38         {
39             s.erase(s.begin()+k);
40         }
41     }
42     if(s.length()==0)e=0;
43     int num=0;
44     k=0;
45     string res;
46     while(num<n)
47     {
48         if(k<s.length())res+=s[k++];
49         else res+='0';
50         num++;
51     } 
52     return res;
53 }
54  
55 int main(){
56    string s1,s2,s3,s4;
57    cin>>n>>s1>>s2;
58    int e1=0,e2=0;
59    s3=deal(s1,e1);
60    s4=deal(s2,e2);
61    if(s3==s4&&e1==e2)
62    {
63        cout<<"YES 0."<<s3<<"*10^"<<e1<<endl;
64        
65    }else
66    {
67        cout<<"NO 0."<<s3<<"*10^"<<e1<<" 0."<<s4<<"*10^"<<e2<<endl;
68    }
69     
70     return 0;
71 }
原文地址:https://www.cnblogs.com/ligen/p/4307856.html