PAT甲级1060 Are They Equal【模拟】
题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805413520719872
题意:
给定两个数,表示成0.xxxxx*10^k次这样的科学记数法之后,判断小数点后的n位是否相同
思路:
分类大讨论。细节要考虑清楚。因为最多是100位所以要用字符串处理。
首先我们要知道这两个数的小数点在什么位置(digita,digtb),如果没有小数点就默认在最后一位。
然后我们还需要知道有没有前导零(firsta,firstb),比如0.001,这样的数小数点也是要挪的。
所以*10^k中的k应该是$digita - firsta$,如果结果是负数还应该加一。
然后是输出前面的东西。要特别判断一下他们是不是0.
把输出的小数点之后的数字重新存储一下,如果不到n位就在后面补0
#include<cstdio>
#include<cstdlib>
#include<map>
#include<set>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<stack>
#include<queue> #define inf 0x7fffffff
using namespace std;
typedef long long LL;
typedef pair<string, string> pr; int n;
char a[], b[]; int main()
{
scanf("%d", &n);
scanf("%s%s", a, b);
int tmpa[], tmpb[];
int diga = -, digb = -;
int lena = strlen(a), lenb = strlen(b);
int da = , db = ;
int firsta = -, firstb = -;
for(int i = ; i < lena; i++){
if(a[i] == '.'){
diga = i;
continue;
}
if(firsta == - && a[i] != ''){
firsta = i;
}
if(diga != - && firsta != -)break;
}
if(diga == -)diga = lena;
if(firsta != -){
diga -= firsta;
if(diga < )diga++;
}
// if(diga < 0){
// while(da < abs(diga)){
// tmpa[da++] = 0;
// }
// }
for(int i = max(firsta, ); i < lena; i++){
if(a[i] == '.'){
continue;
}
tmpa[da++] = a[i] - '';
}
while(da < n){
tmpa[da++] = ;
} for(int i = ; i < lenb; i++){
if(b[i] == '.'){
digb = i;
continue;
}
if(firstb == - && b[i] != ''){
firstb = i;
}
}
if(digb == -){
digb = lenb;
}
if(firstb != -){
digb -= firstb;
if(digb < )digb++;
}
// if(digb < 0){
// while(db < abs(digb)){
// tmpb[db++] = 0;
// }
// }
for(int i = max(, firstb); i < lenb; i++){
if(b[i] == '.')continue;
tmpb[db++] = b[i] - '';
}
while(db < n){
tmpb[db++] = ;
} //cout<<firsta<<endl<<firstb<<endl;
//cout<<diga<<endl<<digb<<endl; if(diga != digb && (firsta != - || firstb != -) && (firsta < n || firstb < n)){
printf("NO 0.");
if(firsta == - || firsta >= n){
for(int i = ; i < n; i++){
printf("");
}
printf("*10^0 0.");
}
else{
for(int i = ; i < n; i++){
printf("%d", tmpa[i]);
}
printf("*10^%d 0.", diga);
}
if(firstb == - || firstb >= n){
for(int i = ; i < n; i++){
printf("");
}
printf("*10^0\n");
}
else{
for(int i = ; i < n; i++){
printf("%d", tmpb[i]);
}
printf("*10^%d\n", digb);
}
}
else{
bool flag = true;
for(int i = ; i < n; i++){
if(tmpa[i] != tmpb[i]){
flag = false;
break;
}
}
if(firsta == - && firstb == -)flag = true;
if(flag){
printf("YES 0.");
if(firsta == -){
for(int i = ; i < n; i++){
printf("");
}
printf("*10^0\n");
}
else{
for(int i = ; i < n; i++){
printf("%d", tmpa[i]);
}
printf("*10^%d\n", diga);
}
}
else{
printf("NO 0.");
if(firsta == -){
for(int i = ; i < n; i++){
printf("");
}
printf("*10^0 0.");
}
else{
for(int i = ; i < n; i++){
printf("%d", tmpa[i]);
}
printf("*10^%d 0.", diga);
}
if(firstb == -){
for(int i = ; i < n; i++){
printf("");
}
printf("*10^0\n");
}
else{
for(int i = ; i < n; i++){
printf("%d", tmpb[i]);
}
printf("*10^%d\n", digb);
}
}
} return ;
}
PAT甲级1060 Are They Equal【模拟】的更多相关文章
- 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 ...
- 【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甲级1026 Table Tennis【模拟好题】
题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805472333250560 题意: 有k张乒乓球桌,有的是vip桌 ...
- PAT甲级1080 Graduate Admission【模拟】
题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805387268571136 题意: 模拟高考志愿录取. 考生根据总 ...
- PAT 甲级 1026 Table Tennis(模拟)
1026. Table Tennis (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A table ...
- pat 甲级 1053. Path of Equal Weight (30)
1053. Path of Equal Weight (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...
- PAT 甲级 1053 Path of Equal Weight (30 分)(dfs,vector内元素排序,有一小坑点)
1053 Path of Equal Weight (30 分) Given a non-empty tree with root R, and with weight Wi assigne ...
- PAT甲级——A1060 Are They Equal
If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered ...
随机推荐
- RMAN-05541: no archived logs found in target database
执行 duplicate target databaseto orcl from active database nofilenamecheck报错如下: RMAN> duplicate tar ...
- JDK自带jvisualvm监控工具
定位 工具位于jdk\bin目录下(双击运行): 可以本地或者远程调试,本地调试会自动加载,远程调试需要配置.下面以Tomcat为例. 概述 监视 线程 抽样器 Java 堆 百度经验参考:https ...
- Visual Studio开发工具升级注意事项
由于前几年公司开发的系统使用的开发工具版本不统一,现在后期维护升级在开发人员的电脑上要同时安装好几个不同的开发工具, 比如VS2008,VS2010,VS2012,甚至还有用VS2003开发的接口之类 ...
- OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法
1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry),它属于立体视觉(stereo vision)几何学,立体视觉是计算机视觉的一个分 ...
- android 显示gif图片
在android中不支持gif格式的图片,但是由于我希望在我的程序中刚刚加载的时候有一个小人在跑步表示正在加载.而这个小人跑就是一个gif图片.也就是希望程序一启动时就加载gif图片.在网上查找了一些 ...
- [转]linux(ubuntu)上运行网易popo
popo没有linux版,连web版和android版都没有,这个实在是不方便.搞了很久,终于搞定了ubuntu上运行popo,暂时还没出现什么问题. 首先要安装PlayOnLinux,直接安装win ...
- Java日志框架(Commons-logging,SLF4j,Log4j,Logback)
简介 在系统开发中,日志是很重要的一个环节,日志写得好对于我们开发调试,线上问题追踪等都有很大的帮助.但记日志并不是简单的输出信息,需要考虑很多问题,比如日志输出的速度,日志输出对于系统内存,CPU的 ...
- Android 网络知识必知必会
目录: 网络分层 TCP 和 UDP 区别 TCP 三次握手以及为什么需要三次握手 UDP 四次挥手以及为什么需要四次挥手 socket 开发相关 Http 是什么 Https 是什么以及和 HTTP ...
- 用H5上传文件
//1,第一步读取用户选中的文件 <input type="file" accept="image/*" onchange = "selecte ...
- ArcGIS Runtime SDK for iOS之符号和渲染
符号定义了图形外观的非地理方面.它包括了图形的颜色.线宽.透明度等等.ArcGIS Runtime SDK for iOS包含了许多符号类,其中的每个类可以让你以独特的方式指定符号.每个符号的类型也是 ...