1060 Are They Equal
题意:
给出两个浮点数(最大不超过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的更多相关文章
- 【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 ...
- PAT 1060 Are They Equal[难][科学记数法]
1060 Are They Equal(25 分) If a machine can save only 3 significant digits, the float numbers 12300 a ...
- PAT 甲级 1060 Are They Equal
1060. Are They Equal (25) 时间限制 50 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue If a ma ...
- 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 ...
- 1060 Are They Equal (25 分)
1060 Are They Equal (25 分) If a machine can save only 3 significant digits, the float numbers 1230 ...
- 1060 Are They Equal (25分)
1060 Are They Equal (25分) 题目 思路 定义结构体 struct fraction{ string f; int index; } 把输入的两个数先都转换为科学计数法,统一标准 ...
- 1060 Are They Equal——PAT甲级真题
1060 Are They Equal If a machine can save only 3 significant digits, the float numbers 12300 and 123 ...
- 1060. Are They Equal (25)
题目如下: If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are consi ...
- PAT 1060. Are They Equal
If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered ...
- 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 ...
随机推荐
- scala学习手记27 - 下划线与参数
在Scala里,下划线(_)可以表示函数值的参数.如果某个参数在函数里仅使用一次,就可以用下划线表示.每次在函数里用下划线,都表示随后的参数. val arr = Array(1, 2, 3, 4, ...
- CheckBox复选框控件
CheckBox复选框控件 一.简介 1. 2.类结构图 二.CheckBox复选框控件使用方法 这里是使用java代码在LinearLayout里面添加控件 1.新建LinearLayout布局 2 ...
- 禁用Browser Link
Browser Link是VS 2013开始引入的一个强大功能,让前端代码(比如AngularJS的代码)在VS中的修改更加轻而易举. 前端代码是运行在浏览器中,而Visual Studio通常只会和 ...
- 在Windows Server 2012上安装SharePoint 2010 SP1
现在很多企业的系统都开始用上了Windows 2012,最近公司需要建立一个门户系统,一开始就想到了微软的SharePoint2010,这玩意确实非常强悍,2008已经褪去,当然直接在Windows ...
- 遍历jsonArray和jsonObject
遍历jsonArray String str = "[{name:'a',value:'aa'},{name:'b',value:'bb'},{name:'c',value:'cc'}]&q ...
- mysql中开启慢查询日志
开启慢查询日志,需要在配置文件my.ini中配置. long_query_time = 1 #设置慢查询时间,配置是下划线log-slow-queries = d:\mysql5\logs\mysql ...
- IOS-社会化分享
一.如何实现社交分享 在iOS中,实现“社交分享”的方法 1.自己编写各个平台的分享代码(代码量较多) 2.利用iOS自带的Social.framework 3.利用第三方的分享框架 友盟分享 ...
- 用工具快速建立hibernate框架
,一.建好项目后先导入两类jar包,一类是hibernate的jar包,一类是jdbc的jar包 二.点击“窗口”--“显示视图”--“其它”-“Hibernate configurations” 三 ...
- notepad++去空格空行技巧
选择视图显示所有字符,替换成空的就行
- dojo chart生成函数
写了一个函数,就是通过传递参数,生成图表,代码如下: /** * created by LZUGIS * @param container * @param type * @param data * ...