• 1060 Are They Equal (25 分)


    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.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.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;
    
    int n;
    string a,b;
    
    const int maxn=110;
    
    struct bign{
        string d;
        int cnt;
    };
    
    
    bign change(string str,int k){
        
        bool flag=false;
        
        bign ans;
        
        int len=(int)str.size();
        
        int i=0;
        
        while(i<len&&str[i]=='0')
        {
            i++;
        }
        
        int pos1=-1,pos2=-1; 
        
    
        
        while(i<len){
            if(str[i]=='.')
                pos2=i;
            else if(str[i]!='0'||flag){
                ans.d+=str[i];
                if(pos1==-1)
                    pos1=i;
                    
                flag=true;    
                    
            }    
                
            i++;    
        }
        
        if(i>=len&&pos2==-1)
            pos2=len;
        
        if(pos2>pos1)
            ans.cnt=pos2-pos1;
        else
            ans.cnt=pos2-pos1+1;
        
            
        
        
        //cout<<pos1<<endl<<pos2<<endl;
        
        
        int anslen=(int)ans.d.size();
        
        if(anslen>=k)
            ans.d=ans.d.substr(0,k);
        else{
            int h=k-anslen;
            while(h--)
                ans.d+='0';
        }
        
        if(flag==false)
            ans.cnt=0;
        
        return ans;
        
    }
    
    bool judge(bign a,bign b){
        if(a.d==b.d&&a.cnt==b.cnt)
            return true;
        else
            return false;
    }
        
        
    void print(bign a){
        cout<<" 0."<<a.d<<"*10^"<<a.cnt;
    }
    
    
    
    int main(){
        cin>>n;
        cin>>a>>b;
        
        bign ansa,ansb;
        
        ansa=change(a,n);
        ansb=change(b,n);
        
        bool flag = judge(ansa,ansb);
        
        if(flag){
            cout<<"YES";
            print(ansa);
        }
            
        else{
            cout<<"NO";
            print(ansa);
            print(ansb);
        
        }
        
        
        
        
        return 0;
        
        
    }
  • 相关阅读:
    spring boot指定外部配置的坑
    beego 批量删除问题
    spark 安装
    HttpServletRequest 获取cookie
    k8s 代码生成
    k8s 各种示例
    mysql-operator
    k8s Docker私有仓库认证
    Failed to introspect annotated methods on class 异常
    P6272 没有人的算术
  • 原文地址:https://www.cnblogs.com/moranzju/p/11291008.html
Copyright © 2020-2023  润新知