PAT 1060. Are They Equal
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的更多相关文章
- 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 (25)
题目意思直接,要求将两个数转为科学计数法表示,然后比较是否相同 不过有精度要求 /* test 6 3 0.00 00.00 test 3 3 0.1 0.001 0.001=0.1*10^-2 p ...
- 【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) 时间限制 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——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 分)
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; } 把输入的两个数先都转换为科学计数法,统一标准 ...
- 【PAT甲级】1060 Are They Equal (25 分)(需注意细节的模拟)
题意: 输入一个正整数N(<=100),接着输入两个浮点数(可能包含前导零,对于PAT已经习惯以string输入了,这点未知),在保留N位有效数字的同时判断两个数是否相等,并以科学计数法输出. ...
随机推荐
- 将分布式-队列的实现交给redis
import requestsimport reimport timefrom redis import Redisimport threading REDIS_HOST, REDIS_PORT, P ...
- tiny4412学习(三)之移植linux-4.x驱动(1)支持网卡驱动【转】
本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/74160686 一.思路 上一节我们通过DNW将内核.文件系统.设备树文件烧入到内 ...
- allonsy
时间限制 1s 空间限制 512MB 2.1 题目描述 "Allons-y!" 时间还算足够,好好看看题吧. 有一种说法,时间线是扭曲的,会相互交织.(一般在科幻片里比较流行?) ...
- 【转载】[Oracle] Linux下手动创建数据库过程
今天发现一个Oracle测试库的字符集设置不正确,原本的字符集是UTF-8,正确的字符集应该是ZHS16GBK,因为UTF-8是ZHS16GBK的超集,无法修改,只能重建数据库,幸好该测试库上还没有数 ...
- zabbix监控kafka消费
一.Kafka监控的几个指标 1.lag:多少消息没有消费 lag=logsize-offset 2.logsize:Kafka存的消息总数 3.offset:已经消费的消息 Kafka管理工具 介绍 ...
- Applications(模拟)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3705 题意:主要是分值计算要注意以下几点: (1) 在MOJ上解出的题,如 ...
- ACM_变形课(并查集)
变形课 Time Limit: 2000/1000ms (Java/Others) Problem Description: 呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermio ...
- UNIX环境高级编程--7
进程环境main函数: C程序总是从main函数开始执行.main函数原型是: int main(int argc, char *argv[]); 当内核执行C程序时(使用一个exe ...
- ansible 显示运行时间
#独家秘诀cd /etc/ansible mkdir callback_plugins cd callback_plugins wget https://raw.githubusercontent.c ...
- oracle数据库忘记用户名和密码莫着急
刚安装完Oracle 11g后,登录的时候没有记住用户名和密码,解决方法:新建一个用户 第一步:以系统身份登录 cmd--->sqlplus 提示输入用户名,然后输入sqlplus/as sys ...