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<cstring>
#include<vector>
#include<algorithm>
#include<iostream>
#include<string>
#include<set>
using namespace std;
string change(string s,int n) {
int k = s.find(".");
if (k == string::npos) {
int i = 0,l;
while(s[i]=='0'){
i++;
}
s = s.substr(i, s.length() - i);
l = s.length();
if (l >= n) {
s = "0." + s.substr(0, n) + "*10^" + to_string(l);
}
else {
s = "0." + s;
int p = n - l;
while (p--) {
s += "0";
}
s=s+ "*10^" + to_string(l);
}
return s;
}
else {
int i = 0;
while (s[i] == '0') {
i++;
}
s = s.substr(i, s.length() - i);
int j = 0;
while (s[j] != '.') j++;
if (j > 0) {
s.erase(s.begin() + j);
int l = s.length() ;
if (l >= n) {
s = "0." + s.substr(0, n) + "*10^" + to_string(j);
}
else {
int p = n - l;
s = "0." + s;
while (p--) {
s += "0";
}
s += "*10^" + to_string(j);
}
}
else {
s.erase(s.begin());
int l = s.length();
int i = 0;
while (s[i] == '0') i++;
s = s.substr(i, l - i);
//cout << s.empty() << "\n";
if (i > 0) {
string s1;
if (s.empty()) s1 = "0";
else s1 = "-"+to_string(i);
if (s.length() >= n) {
s = "0." + s.substr(0, n) + "*10^" + s1;
}
else {
int p = n - s.length();
s = "0." + s;
while (p--) {
s += "0";
}
s += "*10^" + s1;
}
}
else {
if (s.length() >= n) {
s = "0." + s.substr(0, n) + "*10^0";
}
else {
int p = n - s.length();
s = "0." + s;
while (p--) s += "0";
s += "*10^0";
}
}
}
return s;
}
}
int main() {
int n;
cin >> n;
string a1, a2;
cin >> a1>>a2 ;
if (change(a1, n) == change(a2, n))
cout << "YES " << change(a1, n);
else
cout << "NO " << change(a1, n) << " " << change(a2, n);
return 0;
}