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 ...
随机推荐
- Oracle只读用户角色的建立
授予某模式下对象读权限给角色,就可以建立Oracle只读用户角色,下文对该方法的实现步骤作了详细的介绍,供您参考学习. 下面为您介绍的是Oracle只读用户角色的建立方法,该方法供您参考,如果您在Or ...
- mysql如何处理亿级数据,第一个阶段——优化SQL语句
1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...
- gcc/g++ disable warnings in particular include files
当在编译一个大项目的时候,你想打开所有的Warning,但是打开后发现一堆公共库文件都出现了warning报错.此时如果你想忽略公共库头文件中的warning报错,只需要在编译的时候,将公共库头文件的 ...
- GCD使用:让程序在后台较长久的运行(UIBackgroundTaskIdentifier )
在没有使用GCD时,当app被按home键退出后,app仅有最多5秒钟的时候做一些保存或清理资源的工作.但是在使用GCD后,app最多有10分钟的时间在后台长久运行.这个时间可以用来做清理本地 ...
- 块级格式化上下文( Block formatting contexts)
那么如何触发BFC呢? float 除了none以外的值 overflow 除了visible 以外的值(hidden,auto,scroll ) display (table-cell,table- ...
- 基于Extjs 4.2的通用权限管理系统,通用后台模板,EF+MVC+Extjs 4.2
基于Extjs 4.2的通用权限管理系统,通用后台. 我们的宗旨:珍爱生命,拒绝重复!Don't Repeat Yourself!!! 本案例采用EntityFramework+MVC4.0+Extj ...
- hdoj:2032
#include <iostream> #include <string> using namespace std; int main() { int n; ][]; ; i ...
- Zookeeper系列五:Master选举、ZK高级特性:基本模型
一.Master选举 1. master选举原理: 有多个master,每次只能有一个master负责主要的工作,其他的master作为备份,同时对负责工作的master进行监听,一旦负责工作的mas ...
- Java如何使套接字向单个客户端显示消息?
在Java编程中,如何使用套接字向单个客户端显示消息? 以下示例演示了如何使用Socket类的ssock.accept()方法向单个套接字客户端上显示消息. package com.yiibai; i ...
- Guava学习笔记(三):集合
添加Maven依赖 ListsTest import com.google.common.collect.Lists; import org.hamcrest.core.Is; import org. ...