pat1060

1060 Are They Equal (25 分)

题目思路

科学计数法,保留三位有效数字,看是否相等。

  1. 首先把每一个数字转化为科学计数法

  2. 首先找到小数点,指数为小数点所在的位置k,同时去除小数点

  3. 接着,检查第一个数字是不是0,如果是0不符合科学计数法,就把k–(相当有效位扩大

  4. 接下来就是讨论总体长度与有效位的大小,如若小了就进行截取

  5. 如果大了就是用0填充

  6. 最后比较这两个是否相等

相关知识点

补充0填充

basicString=basicString+string(n-basicString.length(),'0');

字符串截取

basicString=basicString.substr(0,index)+basicString.substr(index+1);

第一个是index,第二个是截取的长度

代码复现

#include <iostream>
#include "cstdio"
#include "algorithm"
#include "cstring"
#include "map"
//坑点
//注意一个case里面有多组样例,请用循环处理输入
using namespace std;
const int  N=100010;

string change(string basicString, int n);

int main() {
    int     n;
    string s1,s2;
    cin>>n>>s1>>s2;
    string a =change(s1,n);
    string b= change(s2,n);
    if(a==b){
        cout<<"YES"<<" "<<a;
    } else{
        cout<<"NO"<<" "<<a<<" "<<b;
    }

    return 0;
}

string change(string basicString, int n) {
//    1.寻找到。
    int index=basicString.find('.');
    if(index==-1){
//        说明没有,那就在最后免加一个点,再次寻找
        basicString = basicString+'.';
        index=basicString.find('.');
    }
    basicString=basicString.substr(0,index)+basicString.substr(index+1);
//    记住还要清楚小数点
//   2.便利当前第一个值由多少个0
    while (basicString.length()>0&&basicString[0]=='0'){
        basicString=basicString.substr(1);
//        截取1到n的字符串,去除0位置
        index--;
//        同时10次方减1
    }
//    这是0
    if (basicString.empty()){
        index=0;
    }
//    3.位数不够就补充0
    if(n>basicString.length()){
//         basicString=basicString+string('0',n-index);
        basicString=basicString+string(n-basicString.length(),'0');
    } else{
        basicString=basicString.substr(0,n);
    }

//    这里就显示出来有多少位
    return "0."+basicString+"*10^"+to_string(index);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值