1060. Are They Equal (25)

时间限制
50 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

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
这道题目写的真窝火,所以刚AC,就跑来写博客,好鄙视一下题目。
题目的给定数字会有这样的情况
00234.34000
要把他转换成234.34
另外0.0001科学技术法应该是0.1*10^-3,而不是0.0001*10^0
当n大于数字的个数的时候,要补零
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <string> using namespace std;
pair<string,int> m;
string a,b;
string aa,bb;
int n;
pair<string,int> fun(string a)
{
int len=a.length();
int begin,end;
int tag1=0,tag2=0;
for(int i=0;i<len;i++)//去除前缀的0和后缀的0
{
if(!tag1&&(a[i]!='0'||(a[i]=='0'&&a[i+1]=='.')))
begin=i,tag1=1;
if(tag2==1&&a[i]!='0')
end=i;
if(tag2==0)
end=i;
if(a[i]=='.')
tag2=1;
}
string c=a.substr(begin,end-begin+1);
int i;
for(i=0;c[i];i++)//找到小数点的位置 if(c[i]=='.')
break;
int j;
for(j=0;c[j];j++)//找到第一个不是0的数字位置,即科学技术法中小数点应该放在哪个位置之前,
{
if(c[j]!='0'&&c[j]!='.')
break;
}
string d="0.";int num=0;
for(int ii=j;c[ii];ii++)
{
if(c[ii]=='.') continue;
d+=c[ii];
num++;
if(num>=n)
break;
}
for(int i=0;i<n-num;i++)//补0
d+='0'; int k=i-j;//小数点位置的变化,就是指数
if(k<0) k++;
m.first=d;
m.second=k;
return m;
}
int main()
{
cin>>n>>a>>b;
pair<string,int> mm1,mm2;
mm1=fun(a);
mm2=fun(b);
if(mm1==mm2)
cout<<"YES "<<mm1.first<<"*10^"<<mm1.second<<endl;
else
cout<<"NO "<<mm1.first<<"*10^"<<mm1.second<<" "<<mm2.first<<"*10^"<<mm2.second<<endl;
return 0;
}

PAT 甲级 1060 Are They Equal的更多相关文章

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

  2. PAT甲级1060 Are They Equal【模拟】

    题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805413520719872 题意: 给定两个数,表示成0.xxxx ...

  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 甲级 1053. Path of Equal Weight (30)

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

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

  6. PAT甲级——A1060 Are They Equal

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

  7. PAT甲级——A1053 Path of Equal Weight

    Given a non-empty tree with root R, and with weight W​i​​ assigned to each tree node T​i​​. The weig ...

  8. 1060 Are They Equal——PAT甲级真题

    1060 Are They Equal If a machine can save only 3 significant digits, the float numbers 12300 and 123 ...

  9. PAT 1060 Are They Equal[难][科学记数法]

    1060 Are They Equal(25 分) If a machine can save only 3 significant digits, the float numbers 12300 a ...

随机推荐

  1. 使用ClipboardManager碰到Can&#39;t create handler inside thread that has not called Looper.prepare()

    直接放上我的代码.希望能给碰到相同问题的朋友提供帮助 Runnable runnable = new Runnable() { public void run() { ClipboardManager ...

  2. CBiontCache

    /************************************************************************/ /* 预先加载一些生物以备将来使用 */ /* 专 ...

  3. Ubuntu打开core dump

    输入ulimit -a 如果core file size为0,那就说明没有打开core dump,尽管你的程序crash的时候会显示core dumped,但实际上不会生成core file 输入ul ...

  4. python将str转换成字典

    典型的应用场景:Json数据的解析 >>> user "{'name' : 'jim', 'sex' : 'male', 'age': 18}" >> ...

  5. 一款纯html5实现的时钟

    今天给大家分享一款非常漂亮的纯html5实现的时钟.整个界面都由html5绘制而成.一起看下效果图: 在线预览   源码下载 实现的代码. html代码: <div class="co ...

  6. Unix系统编程()在堆上分配内存

    在堆上分配内存:malloc和free 一般情况下,C程序使用malloc函数族在堆上分配和释放内存.较之brk和sbrk,这些函数具备不少优点: 属于C语言标准的一部分 更易于在多线程程序中使用 接 ...

  7. SSM,即Spring+SpringMVC+MyBatis三个开源框架的整合框架集。

    SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中spring是一个轻 ...

  8. 【BZOJ】1639: [Usaco2007 Mar]Monthly Expense 月度开支(二分)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1639 同tyvj1359,http://www.cnblogs.com/iwtwiioi/p/394 ...

  9. java自定义获取星期几、几点、几分。

    /**     * @author 9082046**@qq.com     *     */    public void out_week_hour_minute()    {        lo ...

  10. clone命令

    git clone <repository> <directory> git clone https://nulab.backlog.jp/git/BLG/tutorial.g ...