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
C++:
/*
@Date : 2018-02-02 11:05:27
@Author : 酸饺子 (changzheng300@foxmail.com)
@Link : https://github.com/SourDumplings
@Version : $Id$
*/
/*
https://www.patest.cn/contests/pat-a-practise/1060
*/
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
string toChop(const string &num, const int prec)
{
int valid = 0;
int exp = 0;
bool decimal = false;
int n = num.length();
string result("0.");
int count = 0;
for (; valid != n && (num[valid] == '0' || num[valid] == '.'); ++valid)
{
if (decimal)
--exp;
if (num[valid] == '.')
// 说明这个数是个小于1的数,即纯小数
decimal = true;
}
if (valid == n)
// 说明这个数为0
exp = 0;
// printf("valid = %d, exp = %d\n", valid, exp);
for (int i = valid; i != n; ++i)
{
if (num[i] != '.')
{
if (count != prec)
{
result += num[i];
++count;
}
}
else if (!decimal)
{
// 这个数不是纯小数并且整数部分读取完毕
exp = i - valid;
decimal = true;
}
}
if (exp == 0 && valid != n)
// 说明是个非零正整数
exp = n - valid;
if (count != prec)
result += string((prec - count), '0');
string exp_s = to_string(exp);
result += "*10^";
result += exp_s;
return result;
}
int main(int argc, char const *argv[])
{
int N;
string s1, s2;
cin >> N >> s1 >> s2;
string result1 = toChop(s1, N), result2 = toChop(s2, N);
if (result1 == result2)
{
printf("YES ");
cout << result1 << endl;
}
else
{
printf("NO ");
cout << result1 << " " << result2 << endl;
}
return 0;
}