If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered equal since they are both saved as 0.123*105 with simple chopping. Now given the number of significant digits on a machine and two float numbers, you are supposed to tell if they are treated equal in that machine.

Input Specification:

Each input file contains one test case which gives three numbers N, A and B, where N (<100) is the number of significant digits, and A and B are the two float numbers to be compared. Each float number is non-negative, no greater than 10100, and that its total digit number is less than 100.

Output Specification:

For each test case, print in a line "YES" if the two numbers are treated equal, and then the number in the standard form "0.d1...dN*10^k" (d1>0 unless the number is 0); or "NO" if they are not treated equal, and then the two numbers in their standard form. All the terms must be separated by a space, with no extra space at the end of a line.

Note: Simple chopping is assumed without rounding.

Sample Input 1:

3 12300 12358.9

Sample Output 1:

YES 0.123*10^5

Sample Input 2:

3 120 128

Sample Output 2:

NO 0.120*10^3 0.128*10^3

代码分析

这道题首先是考有效数字的表达,在自己进行测试检验是要注意输入数据是小数的情况,最后一个测试点输入数据是0.000和00.0000的情况,给出下面几组测试数据:
3 12300 12358.9
YES 0.123*10^5 1 12300 12358.9
YES 0.1*10^5 1 1.2300 1.23589
YES 0.1*10^1 5 1.2300 1.23589
NO 0.12300*10^1 0.12358*10^1 4 0.01234 0.012345
YES 0.1234*10^-1 5 0.01234 0.012345
NO 0.12340*10^-1 0.12345*10^-1 5 0.1234 0.12345
NO 0.12340*10^0 0.12345*10^0 0 0.11 0
YES 0.*10^0或者YES 0.0*10^0,都可以AC,测试点应该没有这个例子 1 0.1 0
NO 0.1*10^0 0.0*10^0 1 0.0 0.1
NO 0.0*10^0 0.1*10^0 1 0.0 0.000
YES 0.0*10^0 1 00.0 0.000
YES 0.0*10^0 4 00.0 0.000
YES 0.0000*10^0 5 00.0 0.000
YES 0.00000*10^0 1 05.0 5.000
YES 0.5*10^1 1 00.01 0.010
YES 0.1*10^-1
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
string a,b;
int n,t1,t2;
cin>>n>>a>>b;
auto it=find(a.begin(),a.end(),'.');
if(it!=a.end()){
t1=-(a.end()-1-it);
a.erase(it);
}
else t1=0;
int i;
for(i=0;i<a.size();i++){
if(a[i]!='0') break;
}
a=a.substr(i,a.size()-i);
it=find(b.begin(),b.end(),'.');
if(it!=b.end()){
t2=-(b.end()-1-it);
b.erase(it);
}
else t2=0;
for(i=0;i<b.size();i++)
if(b[i]!='0') break;
b=b.substr(i,b.size()-i);
t1+=a.size(); t2+=b.size();
if(a=="") t1=0;
if(b=="") t2=0;
if(a.size()<n) a.insert(a.end(),n-a.size(),'0');
if(b.size()<n) b.insert(b.end(),n-b.size(),'0');
if(t1==t2&&a.substr(0,n)==b.substr(0,n))
cout<<"YES 0."<<a.substr(0,n)<<"*10^"<<t1<<endl;
else
cout<<"NO 0."<<a.substr(0,n)<<"*10^"<<t1<<" 0."<<b.substr(0,n)<<"*10^"<<t2;
}

PAT 1060. Are They Equal的更多相关文章

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

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

  2. 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 ...

  3. 【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 ...

  4. PAT 甲级 1060 Are They Equal

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

  5. 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 ...

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

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

  7. 1060 Are They Equal (25 分)

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

  8. 1060 Are They Equal (25分)

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

  9. 【PAT甲级】1060 Are They Equal (25 分)(需注意细节的模拟)

    题意: 输入一个正整数N(<=100),接着输入两个浮点数(可能包含前导零,对于PAT已经习惯以string输入了,这点未知),在保留N位有效数字的同时判断两个数是否相等,并以科学计数法输出. ...

随机推荐

  1. Android TP(三)【转】

    本文转载自:http://blog.csdn.net/bi511304183/article/details/9303259 平台信息:内核:linux2.6/linux3.0系统:android/a ...

  2. Android之利用EventBus进行数据传递

    在项目中,不可避免的要在两个页面之间进行数据的传递,就算不传递,也需要进行刷新之类的,我们根据Google提供的库类方法,也是可以做的,主要有广播broadcastreceiver,startacti ...

  3. js 得到 radiobuttonlist和CheckBoxList 选中值

    js 得到 radiobuttonlist和CheckBoxList 选中值 得到radiobuttonlist 选中值:var CheckBoxList=document.all.optButton ...

  4. nova service-list for juno kilo,liberty openstack

  5. Android属性之build.prop生成过程分析(转载)

    转自: http://www.cnblogs.com/myitm/archive/2011/12/01/2271032.html 本文简要分析一下build.prop是如何生成的.Android的bu ...

  6. PCB 规则引擎之编辑器(语法着色,错误提示,代码格式化)

    对于一个规则引擎中的脚本代码编辑器是非常关键的,因为UI控件直接使用对象是规则维护者,关系到用户体验,在选用脚本编辑器的功能时除了满足代码的编辑的基本编辑要求外,功能还需要包含;语法着色,错误提示,代 ...

  7. PCB genesis SET取中心点--算法实现

    最新ICS工厂有一项incam脚本新需求,这里介绍5种解决方法解决 需求如下图所示:绿色所圈处是是需求出的中心点(图形间距一致归为一类并计算中心点坐标) 前题条件:1.一个SET里面可能有多个CAM, ...

  8. [App Store Connect帮助]二、 添加、编辑和删除用户(6)生成 API 密钥

    如果已批准您访问 App Store Connect API,您可以生成 API 密钥,以便使用该密钥配置.认证和使用 App Store Connect 服务. 有关管理和保护您密钥的更多信息,请参 ...

  9. Jquery课堂上课了,第一节Jquery选择器$

    Jquery是优秀的Javascrīpt框架,$是jquery库的申明,它很不稳定(我就常遇上),换一种稳定的写法jQuery.noConflict();                   jQue ...

  10. jq-文本框只能输入数字

    <input type="text" onKeyUp="value=value.replace(/\D/g,'')"  /> onKeyUp: 当输 ...