A1060 Are They Equal (25 分)
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
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.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
Coding:
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
int main() {
int N;
string A, B, a, b;
cin >> N >> A >> B;
int lena = A.size(), lenb = B.size();
int dna = lena, dnb = lenb;
for (int i = 0; i < lena; i++) {
if (A[i] == '.') {
dna = i;
break;
}
}
for (int i = 0; i < lenb; i++) {
if (B[i] == '.') {
dnb = i;
break;
}
}
int p = 0, q = 0;
while (A[p] == '0' || A[p] == '.') p++;
while (B[q] == '0' || B[q] == '.') q++;
int ea = 0, eb = 0;
if (p < dna)
ea = dna - p;
else
ea = dna - p + 1;
if (q < dnb)
eb = dnb - q;
else
eb = dnb - q + 1;
if (p == lena)
ea = 0;
if (q == lenb)
eb = 0;
for (int i = 0; i < N; ++i) {
if (p < lena && A[p] != '.')
a += A[p];
else if (p >= lena)
a += "0";
else if (A[p] == '.')
i--;
p++;
}
for (int i = 0; i < N; ++i) {
if (q < lenb && B[q] != '.')
b += B[q];
else if (q >= lenb)
b += "0";
else if (B[q] == '.')
i--;
q++;
}
if (a == b && ea == eb)
cout << "YES 0." << a << "*10^" << ea << endl;
else
cout << "NO 0." << a << "*10^" << ea << " " << "0." << b << "*10^" << eb << endl;
return 0;
}