1060 Are They Equal


/*
Sologala @github https://github.com/Sologala/PAT_OJ
PAT_oj No.1060_Are_They_Equal
*/

可以先把小数点移动最左边。 然后按要求 输出几位,不够补上0.

还要注意如果是000001.00001 这种需要把 整数部分前面的0清掉,但整数部分是 0的时候 ,比如 0.000001还需要把小数部分前面的0 清掉,清小数部分前面0 的时候 还需要将指数值-1。 在输出。

​ 小数点的位置就是当前的指数。

ac_code

  /*
    Sologala   @github    https://github.com/Sologala/PAT_OJ
    PAT_oj No.1060 Are They Equal
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
int c,ex1 =0,ex2 =0;
string N1,N2;
string R1,R2;
int main(){
    cin>>c>>N1>>N2;
    int i=0;    
    //清小数点前面的 0.
    for(i=0; i < N1.length()&&N1[i]=='0';)
    {
        N1.erase(N1.begin()+i);
    }
    for(i=0; i < N2.length()&&N2[i]=='0';)
    {
        N2.erase(N2.begin()+i);
    }
    //找小数点并且删除小数点.
    for(i =0; i < N1.length(); i++)
    {
        if(N1[i]=='.'){N1.erase(N1.begin()+i);break;}
    }
    ex1 =i;
    for(i=0; i < N2.length(); i++)
    {
        if(N2[i]=='.'){ N2.erase(N2.begin()+i);break;}
    }
    ex2 =i;
    //有可能 是小于的小数。 0.0000000001 这样需要把 剩余的0 清掉。
    for(i=0; i < N1.length()&&N1[i]=='0';)
    {
        N1.erase(N1.begin()+i);
        ex1--;
    }
    for(i=0; i < N2.length()&&N2[i]=='0';)
    {
        N2.erase(N2.begin()+i);
        ex2--;
    }
    //如果是0 N1 N2 会变成空穿
    if(N1.length()==0) ex1 =0;
    if(N2.length()==0) ex2 =0;
    //结果补充0
    for(i=0;i<c;i++){
        if(i<N1.length()&&N1[i]!='0'){
            R1.push_back(N1[i]);
        }
        else  R1.push_back('0');
    }    
    for(i=0;i<c;i++){
        if(i<N2.length()&&N2[i]!='0'){
            R2.push_back(N2[i]);
        }
        else  R2.push_back('0');
    }
    //输出
    if(R1==R2&&ex1==ex2){
        cout<<"YES ";
        cout<<"0";
        if(R1.length()){
            cout<<"."<<R1<<"*10^"<<ex1;
        }
    }
    else{
        cout<<"NO ";
        cout<<"0";
        if(R1.length()){
            cout<<"."<<R1<<"*10^"<<ex1;
        }
        cout<<" 0";
        if(R2.length()){
            cout<<"."<<R2<<"*10^"<<ex2;
        }
    }
    return 0;
}
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值