题意:

给出两个浮点数(最大不超过10^100),以及存储的有效位数,判断这两个数是否相等。如12300和12358.9若存储的有效位数为3,则均表示为0.123*10^5,因此视为相等。

思路:【字符串处理】

这一题是以科学计数法为背景的字符串处理问题。首先,题目中明确数值大小的范围在10^100,因此属于大整数问题,用字符串string存储。·其次,对于任意一个数,科学计数法的表示为: .d[]...d[N]*^k  其中d[1]>0,除非这个数本身就是0,即数值0存储为:0.000*10^0(假设有效位数是3)。若要比较两个数是否相等,只需要比较两个方面,即有效位数部分 d[]...d[N] 和指数部分 k 是否都相等,只有在两部分都相等的情况下,才判定这两个数相等。因此,问题的关键是如何求出这两个部分。

样例给出情况太少,需要自己考虑更多的情况,如:(假设有效位数都是3)

000 0000   YES 0.000*10^0

000 0.00    YES 0.000*10^0

0012300 12358.9   YES 0.123*10^5

0.001200 1.2   NO 0.120*10^-2  0.120*10^1

分析:

首先,不管给出的数是小数还是整数,需要先排除是否存在前导0,因为在数值表示中00123和123,0000.168和0.168是一样的,所以在真正的逻辑处理前先要排除这样的干扰(这是处理数值问题常见的,默认应该考虑到的坑);

其次,具体到本题,我们把情况分为整数部分小于0和大于0的情况(为什么会这么考虑,因为如31.4,其科学计数法的指数部分是2;而0.00314,其科学计数法的指数部分是-2,一正一负)。整数部分小于0的,如  ,其中小数部分首个非0数字之前的0的个数的相反数就是这个值科学计数法的指数exp,我们可以遍历这部分字符串,若当前字符为0,则exp--,遇到第一个非0字符就退出。然后在剩下的部分截取(或者补0)出n个有效位数即可。需要特别注意的是,  和  这种情况,其对应的exp=0,要特别考虑。

对于字符串处理的问题,往往实现起来比较麻烦,可能要考虑很多边界情况,耗时较长,代码写的也像是一坨**一样,道阻且长,慢慢修炼!

代码:

#include <iostream>
#include <string>
using namespace std;

int n;//有效位数

//exp传入时为0
string change(string str,int& exp)
{
    string significantPart;
    //删除可能存在的前导0,当至少保留一位
     && str[]==')
        str.erase(str.begin());
    ]=='.'){//整数部分为0
        str.erase(str.begin());
         && str[]=='){
            exp--;
            str.erase(str.begin());
        }
        ) exp=;//特别处理,如0.000
        ,n);
        ');
    }else{//整数部分不为0
        ) {
            ]!=') exp=str.size();//特殊处理,需要考虑值就是0的情况,当且仅当str不为0时,exp才等于其size;对于0而言,exp统一为0,因为exp传入时为0,故不用在此处理
        }else {
            exp=pointPos;
            str.erase(pointPos,);
        }
        ,n);
        ');
    }
    return significantPart;
}

int main()
{
    string str_a,str_b;
    cin>>n>>str_a>>str_b;
    ,exp_b=;
    string ans_a=change(str_a,exp_a);
    string ans_b=change(str_b,exp_b);
    if(ans_a==ans_b && exp_a==exp_b){
        cout<<"YES "<<"0."<<ans_a<<"*"<<"10^"<<exp_a;
    }else{
        cout<<"NO";
        cout<<" 0."<<ans_a<<"*"<<"10^"<<exp_a;
        cout<<" 0."<<ans_b<<"*"<<"10^"<<exp_b;
    }
    ;
}

1060 Are They Equal的更多相关文章

  1. 【PAT】1060 Are They Equal (25)(25 分)

    1060 Are They Equal (25)(25 分) If a machine can save only 3 significant digits, the float numbers 12 ...

  2. PAT 1060 Are They Equal[难][科学记数法]

    1060 Are They Equal(25 分) If a machine can save only 3 significant digits, the float numbers 12300 a ...

  3. PAT 甲级 1060 Are They Equal

    1060. Are They Equal (25) 时间限制 50 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue If a ma ...

  4. PAT 甲级 1060 Are They Equal (25 分)(科学计数法,接连做了2天,考虑要全面,坑点多,真麻烦)

    1060 Are They Equal (25 分)   If a machine can save only 3 significant digits, the float numbers 1230 ...

  5. 1060 Are They Equal (25 分)

    1060 Are They Equal (25 分)   If a machine can save only 3 significant digits, the float numbers 1230 ...

  6. 1060 Are They Equal (25分)

    1060 Are They Equal (25分) 题目 思路 定义结构体 struct fraction{ string f; int index; } 把输入的两个数先都转换为科学计数法,统一标准 ...

  7. 1060 Are They Equal——PAT甲级真题

    1060 Are They Equal If a machine can save only 3 significant digits, the float numbers 12300 and 123 ...

  8. 1060. Are They Equal (25)

    题目如下: If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are consi ...

  9. PAT 1060. Are They Equal

    If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered ...

  10. pat 1060. Are They Equal (25)

    题目意思直接,要求将两个数转为科学计数法表示,然后比较是否相同  不过有精度要求 /* test 6 3 0.00 00.00 test 3 3 0.1 0.001 0.001=0.1*10^-2 p ...

随机推荐

  1. netty的异常分析 IllegalReferenceCountException refCnt: 0

    netty的异常 IllegalReferenceCountException refCnt: 0 这是因为Netty有引用计数器的原因,自从Netty 4开始,对象的生命周期由它们的引用计数(ref ...

  2. Selenium with Python 009 - WebDriver API

    官方API文档:https://seleniumhq.github.io/selenium/docs/api/py/api.html 更多详情,最好的学习方式可以查阅官方API文档或直接阅读源码,本文 ...

  3. Robot Framework(一)

    一. 定义 Robot Framework是一款python编写的功能自动化测试框架,具有良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行 二. Robot ...

  4. UVALive 4270 Discrete Square Roots

    题目描述: 在已知一个离散平方根的情况下,按照从小到大的顺序输出其他所有的离散平方根. 在模n意义下,非负整数x的离散平方根是满足0<=r<n且r2=x(mod n)的整数r. 解题思路: ...

  5. vue-cli favicon 怎么引入

    把你的 favicon 图标放到 static 目录下,然后修改 link 标签指向 static 目录下的 favicon 图标文件即可

  6. dga2

    0e527eaf_5ec5_4623_9fe9_e459583acd72.com0fmgm1cuu7h1279dghgka0ltg.com0ydlanpuh4e2wl9h6udk6.com10uz8k ...

  7. css03层次选择器

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  8. 大马猴队-Alpha阶段项目复审

    队名 优点 缺点 名次 菜鸡互坑队 经典游戏,情怀加分. 刷新的苹果会在蛇身上出现  14 菜鸡互啄 利用python语言实现git版本管理,典型用户清晰. 没有很好地分析用户痛点,没有测试计划  4 ...

  9. RPi 2B QEMU 模拟树莓派

    /******************************************************************************** * RPi 2B QEMU 模拟树莓 ...

  10. (六)java数据类型

      数据类型:决定了变量占据多大的空间,决定了变量存储什么类型的数据 整形: byte     1个字节 short    2个字节 int        4个字节 long     8个字节 浮点型 ...