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

需要注意的是的情况为0.00, 0012.3 0.00123等等

 1 #include <iostream>
 2 #include <string>
 3
 4 using namespace std;
 5
 6 int CalculateRadix(string &num)
 7 {
 8     int i = 0;
 9     while (i < num.size())
10     {
11         if (num[i] == ‘.‘)
12         {
13             num.erase(i, 1);
14             break;
15         }
16         i++;
17     }
18
19     return i;
20 }
21
22 int erasezero(string &num)
23 {
24     int cnt = 0;
25     string::iterator it = num.begin();
26     while (it!=num.end()&& (*it) == ‘0‘)
27     {
28         it = num.erase(it);
29         cnt++;
30     }
31     return cnt;
32 }
33
34 string CalculateCoeff(string num, int significantNum, int &radix)
35 {
36     string coeff;
37     radix -= erasezero(num);
38     if (num.empty())
39         radix = 0;
40     if (num.size() >= significantNum)
41         coeff.assign(num.begin(), num.begin() + significantNum);
42     else
43         coeff = num + string(significantNum - num.size(), ‘0‘);
44
45     return "0." + coeff;
46 }
47
48 int main()
49 {
50     string num1, num2;
51     int significantNum;
52     cin >> significantNum >> num1 >> num2;
53
54     int radix1, radix2;
55     radix1 = CalculateRadix(num1);
56     radix2 = CalculateRadix(num2);
57
58     string coeff1 = CalculateCoeff(num1, significantNum, radix1);
59     string coeff2 = CalculateCoeff(num2, significantNum, radix2);
60
61     if (coeff1 == coeff2&&radix1 == radix2)
62         cout << "YES" << " " << coeff1 << "*10^" << radix1;
63     else
64         cout << "NO" << " " << coeff1 << "*10^" << radix1 << " " << coeff2 << "*10^" << radix2;
65 }
时间: 2024-10-08 05:07:42

PAT 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) 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

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 爱丁顿数(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 输出样例:

PAT 1074. Reversing Linked List (25)

Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L.  For example, given L being 1→2→3→4→5→6, if K = 3, then you must output 3→2→1→6→5→4; if K = 4, you must output 4→3→2→1→5→6. Input Specifica

PAT 1060. 爱丁顿数

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

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, y