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
#include <iostream>
using namespace std;
#include <string>
int getExpo(string x){
int i=0,j=0;
//小数点的位置
for(i=0;i<x.length();i++){
if(x[i]=='.') break;
}
//第一个不为0的digit的位置
for(j=0;j<x.length();j++){
if(x[j]!='0'&&x[j]!='.') {
break;
}
}
if (j==x.length()) return 0;
else if(i>=j) return (i-j);
else return (i-j+1);
}
string getFloat(string x,int digit){
string a;
a.push_back('0');
a.push_back('.');
int index=0;
for(index=0;index<x.length();index++){
if(x[index]!='0'&&x[index]!='.') {
break;
}
}
int count=0;
for(int j=index;j<x.length();j++){
if(x[j]!='.') {
a.push_back(x[j]);
count++;
}
if(count==digit) break;
}
int d=digit-x.length()+index;
if(d>0) { //补0
for(int i=0;i<d;i++) a.push_back('0');
}
return a;
}
int main(){
int digit;
string A,B;
cin>>digit>>A>>B;
string A1=getFloat(A,digit);
string B1=getFloat(B,digit);
int A2=getExpo(A);
int B2=getExpo(B);
if(A1==B1&&A2==B2){
cout<<"YES"<<" ";
cout<<A1<<"*10^"<<A2<<endl;
}
else{
cout<<"NO";
cout<<" "<<A1<<"*10^"<<A2;
cout<<" "<<B1<<"*10^"<<B2;
}
return 0;
}
//需要注意的是的情况为0.00, 0012.3 0.00123等等