题目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【模拟】的更多相关文章

  1. PAT 甲级 1060 Are They Equal

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

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

  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甲级1026 Table Tennis【模拟好题】

    题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805472333250560 题意: 有k张乒乓球桌,有的是vip桌 ...

  5. PAT甲级1080 Graduate Admission【模拟】

    题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805387268571136 题意: 模拟高考志愿录取. 考生根据总 ...

  6. PAT 甲级 1026 Table Tennis(模拟)

    1026. Table Tennis (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A table ...

  7. pat 甲级 1053. Path of Equal Weight (30)

    1053. Path of Equal Weight (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...

  8. 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 W​i​​ assigne ...

  9. PAT甲级——A1060 Are They Equal

    If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered ...

随机推荐

  1. redhat7.0配置网卡

    1.切换到网卡配置目录: cd /etc/sysconfig/network-scripts 2.编辑网卡信息 如 vim ifcfg-enpos3 TYPE=Ethernet #设备类型 BOOTP ...

  2. Android 使用开源库StickyGridHeaders来实现带sections和headers的GridView显示本地图片效果

    大家好!过完年回来到现在差不多一个月没写文章了,一是觉得不知道写哪些方面的文章,没有好的题材来写,二是因为自己的一些私事给耽误了,所以过完年的第一篇文章到现在才发表出来,2014年我还是会继续在CSD ...

  3. 为什么要用 Node.js

    每日一篇优秀博文 2017年10月10日 周二 为什么要用 Node.js 这是一个移动端工程师涉足前端和后端开发的学习笔记,如有错误或理解不到位的地方,万望指正. Node.js 是什么 传统意义上 ...

  4. ssh的tunnel隧道打洞

    分正向和反向. 假设,本地机器可以ssh连上远程机器.本地机器在下面叫做SSHClient, 远程机器叫做SSHServer. 一. 正向代理(本地转发) 在SSHClient机上执行: : SSHS ...

  5. hive表增量抽取到mysql(关系数据库)的通用程序(三)

    hive表增量抽取到oracle数据库的通用程序(一) hive表增量抽取到oracle数据库的通用程序(二) 这几天又用到了该功能了,所以又改进了一版,增加了全量抽取和批量抽取两个参数.并且可以设置 ...

  6. 5 款最新的 jQuery 图片裁剪插件

    这篇文章主要介绍最新的 5 款 jQuery 图片裁剪插件,可以帮助你轻松的实现你网站需要的图像裁剪功能. Cropit Cropit 是一个 jQuery 插件,支持图像裁剪和缩放功能.Cropit ...

  7. python风格的抽象工厂模式

    抽象工厂模式: 提供一个接口,用户创建多个相关或依赖对象,而不需要指定具体类. 原则: 依赖抽象,不依赖具体类. 实例: 用不同原材料制作不同口味的披萨,创建不同原材料的工厂,不同实体店做出口味不同的 ...

  8. table给tbody设置滚动条

    table结构例子: <table class="layui-table"> <thead> <tr> <th> 贷款项目 < ...

  9. 查看pip安装的Python库

    查看安装的库 pip list或者pip freeze 查看过时的库 pip list --outdated 批量更新的Python脚本 import pip from subprocess impo ...

  10. AbtestingGateway 复制请求到其他服务上

    perface 最近有需求,需要把服务a发给服务b的请求复制给服务c,服务a发给服务b的时候会经过nginx,这个nginx是有lua脚本来辅助工作的.说白了,这个nginx+lua就是abtesti ...