1060 Are They Equal

##### 12、 转化为科学计数法✔
pos = s.find('.');去除小数点;

#include<iostream>                    //科学计数法  ,N表示现实多少位
using namespace std;                    //先去掉前置0    (如果是0.004这种)还需要判断后继续去前置0
                                        //之后分别计算数字部分和指数部分就行了

string solve(int N,string s){
    int exp=0;
    
    while(s.size() >0 && s[0]=='0'){
        s.erase(s.begin());
    }
    if(s[0] =='.'){         //去掉前导0是小数点,说明s后面是小数
        s.erase(s.begin());
        while(s.size() >0 && s[0]=='0'){
            s.erase(s.begin());
            exp--;
        }
    }
    else{               //说明是整数部分
        int i=0;
        for( ;i<s.size() && s[i]!='.';i++){
            exp++;
        }
        if(i<s.size()){
            s.erase(s.begin()+i);
        }
        //删除这个小数点即可,得到想要的整个数字部分。因为咱们指数已经确定了
        //或者你在后面读取的时候对小数点进行讨论,但可能更麻烦
    }
    if(s.size()==0) exp=0;
    //已经将字符串处理完,现在仅包含数字部分(指数已确定所以不用管),且为空的话,重新更新指数为0.
    

    string ans="";
    for(int i=0,k=0;k<N;i++,k++){   //补0操作
        if( i <s.size() ) ans+=s[i];    //如果字符串没结束,赋值
        else ans+='0';                  //  如果结束了,补0
    }
    
    ans="0."+ans+"*10^"+to_string(exp);
    
    return ans;
}


int main()
{
    int N;
    string A,B,resA,resB;
    cin>>N>>A>>B;
    resA = solve(N,A);
    resB = solve(N,B);
    if(resA==resB)
        cout<<"YES "<<resA<<endl;
    else
        cout<<"NO "<<resA<<" "<<resB<<endl;
    
    
    
    
    
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值