A1060 Are They Equal (25 分)
一、技术总结
- cnta、cntb用于记录小数点出现的位置下标,初始化为strlen(字符串)长度。
- q、p用于记录第一个非0(非小数点)出现的下标,可以用于计算次方和方便统计输出的字符串,考虑到前面可能出现0。
- 如果cnta > p ,说明小数点在第一个开始的非0数的下标的右边,那么科学计数法的指数为cnta – p ; 否则应该为cnta – p + 1; 字符串b同理
- 如果字符串p、q等于字符串长度,说明字符串为0,此时直接把 cnta(或者cntb)置为0,因为对于 0来说乘以几次方都是相等的,如果不置为0可能会出现两个0比较导致判断为它们不相等
- indexa = 0开始给新的A数组赋值,共赋值n位除去小数点外的正常数字,从p的下标开始。如果p 大于等于strlen,说明字符串遍历完毕后依旧没能满足需要的位数,此时需要在A数组后面补上0 直到满足n位数字。indexb同理,产生新的B数组
- 判断A和B是否相等,且cnta和cntb是否相等。如果相等,说明他们用科学计数法表示后是相同的,输出YES,否则输出NO,同时输出正确的科学计数法
- 数组开大一点
二、参考代码
#include<iostream>
#include<cstring>
using namespace std;
int main(){
int n, p = 0, q = 0;
char a[10000], b[10000], A[10000], B[10000];
scanf("%d%s%s", &n, a, b);
int cnta = strlen(a), cntb = strlen(b);
for(int i = 0; i < strlen(a); i++){
if(a[i] == '.'){
cnta = i;
break;
}
}
for(int i = 0; i < strlen(b); i++){
if(b[i] == '.'){
cntb = i;
break;
}
}
int indexa = 0, indexb = 0;
while(a[p] == '0' || a[p] == '.') p++;
while(b[q] == '0' || b[q] == '.') q++;
if(cnta > p) cnta = cnta - p;
else cnta = cnta - p + 1;
if(cntb > q) cntb = cntb - q;
else cntb = cntb - q + 1;
if(p == strlen(a)) cnta = 0;
if(q == strlen(b)) cntb = 0;
while(indexa < n){
if(a[p] != '.' && p < strlen(a)) A[indexa++] = a[p];
else if(p >= strlen(a)) A[indexa++] = '0';
p++;
}
while(indexb < n){
if(b[q] != '.' && q < strlen(b)) B[indexb++] = b[q];
else if(q >= strlen(b)) B[indexb++] = '0';
q++;
}
if(strcmp(A, B) == 0 && cnta == cntb)
printf("YES 0.%s*10^%d", A, cnta);
else
printf("NO 0.%s*10^%d 0.%s*10^%d", A, cnta, B, cntb);
return 0;
}
A1060 Are They Equal (25 分)的更多相关文章
- 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; } 把输入的两个数先都转换为科学计数法,统一标准 ...
- 【PAT甲级】1060 Are They Equal (25 分)(需注意细节的模拟)
题意: 输入一个正整数N(<=100),接着输入两个浮点数(可能包含前导零,对于PAT已经习惯以string输入了,这点未知),在保留N位有效数字的同时判断两个数是否相等,并以科学计数法输出. ...
- 【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】1043 Is It a Binary Search Tree(25 分)
1043 Is It a Binary Search Tree(25 分) A Binary Search Tree (BST) is recursively defined as a binary ...
- 【算法笔记】A1060 Are They Equal
1060 Are They Equal (25 分) If a machine can save only 3 significant digits, the float numbers 1230 ...
- A1055 The World's Richest(25 分)
A1055 The World's Richest(25 分) Forbes magazine publishes every year its list of billionaires based ...
- PATA1055 The World's Richest (25 分)
1055 The World's Richest (25 分) Forbes magazine publishes every year its list of billionaires based ...
随机推荐
- Vue 中的keep-alive 什么用处?
keep-alive keep-alive是Vue提供的一个抽象组件,用来对组件进行缓存,从而节省性能,由于是一个抽象组件,所以在v页面渲染完毕后不会被渲染成一个DOM元素 <keep-aliv ...
- JavaWeb 错误/异常时页面提示
经常我们会遇到发生页面404错误,服务器 500 异常,如果默认方式处理,则是将异常捕获之后跳到 Tomcat 缺省的异常页面,如下图所示.
- 【Beta阶段】第十一周Scrum会议
[Beta阶段]第十一周Scrum会议 本次会议为第十一周第一次Scrum Meeting,会议对上周工作进行了总结,并对工作成果予以了肯定. 会议时间为2019.11.28.会议地点为中国海洋大学北 ...
- Mac录制或保存视频后如何放大?
想要在录制和拍摄视频后在喜欢的场景(例如Mark)中放大视频吗?本文将向您展示如何放大视频并通过裁剪视频和“平移和缩放”效果来制作Ken Burns效果.Filmora9是一款功能强大的视频编辑器,具 ...
- 损失函数———有关L1和L2正则项的理解
一.损失函: 模型的结构风险函数包括了 经验风险项 和 正则项,如下所示: 二.损失函数中的正则项 1.正则化的概念: 机器学习中都会看到损失函数之后会添加一个额外项,常用的额外项一般有2种, ...
- leetcode——链表
206. 反转链表(易) 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->N ...
- Iris入门操练1
选一个框架,慢慢熟悉··· 按官网文档,先走一次.. package main import ( "github.com/kataras/iris/v12" "githu ...
- fiddler 常用命令及快捷键
1.搜索: ? baidu.com 2.bpu 发起请求时中断 设置断点 bpu baidu.com 取消断点:bpu 3.bpafter 收到响应后中断 设置断点:bpafter baidu.c ...
- Java之线程安全
什么是线程安全? 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的. 什么是线程安全问题? ...
- JavaScript Array filter() 方法
JavaScript Array filter() 方法 var ages = [32, 33, 16, 40]; function checkAdult(age) { return age > ...