1060 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 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 (<) 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 1, 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.d[1]...d[N]*10^k (d[1]>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
 思路:讨论阶数和尾数,但是情况非常复杂,需要处理前导零、后导零等,先留着
 
#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;

int main(){
    int n;
    cin>>n;
    string a,b;
    cin>>a>>b;
    int lena=0,lenb=0;
    for(int i=0;i<a.size();i++){
        if(a[i]=='.'){
            break;
        }
        else{
            lena++;
        }
    }
    for(int i=0;i<b.size();i++){
        if(b[i]=='.'){
            break;
        }
        else{
            lenb++;
        }
    }
    string suba="";
    for(int i=0;i<a.size();i++){
        if(a[i]!='.'&&suba.size()<n){
            suba+=a[i];
        }
    }
    while(suba.size()<n){
        suba+='0';
    }
    string subb="";
    for(int i=0;i<b.size();i++){
        if(b[i]!='.'&&subb.size()<n){
            subb+=b[i];
        }
    }
    while(subb.size()<n){
        subb+='0';
    }
    if(a=="0"){
        cout<<"NO"<<" "<<"0"<<" ";
        cout<<"0."<<subb<<"*10^"<<lenb<<endl;
    }
    else if(b=="0"){
        cout<<"NO"<<" ";
        cout<<"0."<<suba<<"*10^"<<lena<<endl;
        cout<<"0"<<" ";
        
    }
    else if(subb==suba&&lena==lenb){
        cout<<"YES"<<" ";
        cout<<"0."<<suba<<"*10^"<<lena<<endl;
    }
    else{
        cout<<"NO"<<" ";
        cout<<"0."<<suba<<"*10^"<<lena<<" ";
        cout<<"0."<<subb<<"*10^"<<lenb<<endl;
    }

    return 0;
}
 
 
原文地址:https://www.cnblogs.com/dreamzj/p/14961346.html