1060 Are They Equal (25 分)

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×10?5?? 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 10?100??, 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.d[1]...d[N]*10^k (d[1]>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
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
int n;//有效位数
string deal(string s,int &e){
    int k=0;//s的下标
    while(s.length()>0&&s[0]==‘0‘){
        s.erase(s.begin());//去掉s的前导0
    }
    if(s[0]==‘.‘){
        s.erase(s.begin());//去掉前导0后是小数点,说明s是小于1的小数
        while(s.length()>0&&s[0]==‘0‘){
            s.erase(s.begin());//去掉小数点后非零位前的所有零
            e--;//每去掉一个零,指数e减1
        }
    } else{//去掉所有前导零后不是小数点,则找到后面的小数点删除
        while(k<s.length()&&s[k]!=‘.‘){
            k++;
            e++;//只要不碰到小数点就让指数e++
        }
        if(k<s.length()){//while结束后k<s.length(),说明碰到了小数点
            s.erase(s.begin()+k);//把小数点删除
        }
    }
    if(s.length()==0){
        e=0;//如果去掉前导零后s的长度变为0,说明这个数为0
    }
    int num=0;
    k=0;
    string res;
    while(num<n){
        if(k<s.length())res+=s[k++];//只要还有数字,就加到res末尾
        else res+=‘0‘;//否则res末尾添加0
        num++;//精度加1
    }
    return res;
}

int main(){
    string s1,s2,s3,s4;
    cin>>n>>s1>>s2;
    int e1=0,e2=0;//e1,e2为s1与s2的指数
    s3=deal(s1,e1);
    s4=deal(s2,e2);
    if(s3==s4&&e1==e2){
        cout<<"YES 0."<<s3<<"*10^"<<e1<<endl;
    } else{
        cout<<"NO 0."<<s3<<"*10^"<<e1<<" 0."<<s4<<"*10^"<<e2<<endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/binanry/p/10050737.html

时间: 2024-10-08 05:07:53

1060 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 12300 and 12358.9 are considered equal since they are both saved as 0 with simple chopping. Now given the number of significant digits on a machine and two

PAT Advanced 1060 Are They Equal (25分)

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 with simple chopping. Now given the number of significant digits on a machine and two float numbers, you are supp

PAT 1060. Are They Equal (25)

1060. Are They Equal (25) 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 a

1060. Are They Equal (25)

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

PAT:1060. Are They Equal (25) AC

#include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; int n; string deal(string s,int &e) //[思维]1:吸收多余0:.2:找到“.”判断与1的大小.3:去除“.”的同时统计10的指数(正负与step2有关) { //4:判断是否删完了,删完了表明数字是0.5:存入前n个数字,不足用

PAT (Advanced Level) 1060. Are They Equal (25)

模拟题.坑点较多. #include<iostream> #include<cstring> #include<cmath> #include<algorithm> #include<cstdio> #include<map> #include<queue> #include<string> #include<stack> #include<vector> using namespace

pat 1060 爱丁顿数(25 分)

英国天文学家爱丁顿很喜欢骑车.据说他为了炫耀自己的骑车功力,还定义了一个"爱丁顿数" E ,即满足有 E 天骑车超过 E 英里的最大整数 E.据说爱丁顿自己的 E 等于87. 现给定某人 N 天的骑车距离,请你算出对应的爱丁顿数 E(≤N). 输入格式: 输入第一行给出一个正整数 N (≤10?5??),即连续骑车的天数:第二行给出 N 个非负整数,代表每天的骑车距离. 输出格式: 在一行中给出 N 天的爱丁顿数. 输入样例: 10 6 7 6 9 3 10 8 2 7 8 输出样例:

1060 爱丁顿数 (25 分)

题目:1060 爱丁顿数 (25 分) 英国天文学家爱丁顿很喜欢骑车.据说他为了炫耀自己的骑车功力,还定义了一个“爱丁顿数” E ,即满足有 E 天骑车超过 E 英里的最大整数 E.据说爱丁顿自己的 E 等于87. 现给定某人 N 天的骑车距离,请你算出对应的爱丁顿数 E(≤). 输入格式: 输入第一行给出一个正整数 N (≤),即连续骑车的天数:第二行给出 N 个非负整数,代表每天的骑车距离. 输出格式: 在一行中给出 N 天的爱丁顿数. 输入样例: 10 6 7 6 9 3 10 8 2 7

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 tree which has the following properties: The left subtree of a node contains only nodes with keys less than the node's key. The right subtree of a no

1055 The World&#39;s Richest (25 分)

1055 The World's Richest (25 分) Forbes magazine publishes every year its list of billionaires based on the annual ranking of the world's wealthiest people. Now you are supposed to simulate this job, but concentrate only on the people in a certain ran