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 form0.d[1]...d[N]*10^k
(d[1]
>0 unless the number is 0); orNO
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>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int n,p=0,q=0;
char a[10000],b[10000],A[10000],B[10000];
cin>>n>>a>>b;
int cnta=strlen(a),cntb=strlen(b);
for(int i=0;i<cnta;i++)
{
if(a[i]=='.')
{
cnta=i;
break;
///First find the decimal point position of two numbers.
}
}
for(int i=0;i<cntb;i++)
{
if(b[i]=='.')
{
cntb=i;
break;
}///In order to determine the index.
}
int indexa=0,indexb=0;
while(a[p]=='0'||a[p]=='.')p++;
while(b[q]=='0'||b[q]=='.')q++;
///Find the first non-zero and non-decimal position,if there is extra 0 in front of it.
///p or q is the location of the new decimal point.
if(cnta>=p)
cnta=cnta-p;
else
cnta=cnta-p+1;
if(cntb>=q)
cntb=cntb-q;
else
cntb=cntb-q+1;///Find the index.
if(p==strlen(a))
cnta=0;
if(q==strlen(b))
cntb=0;///The string is 0
while(indexa<n)
{///Take n digits after the decimal point.
if(a[p]!='.'&&p<strlen(a))
A[indexa++]=a[p];///!='.':Integer before and after the decimal point,25.32
else if(p>=strlen(a))
A[indexa++]='0';
p++;
}
while(indexb<n)
{
if(b[q]!='.'&&q<strlen(b))
B[indexb++]=b[q];
else if(q>=strlen(b))
B[indexb++]='0';
q++;
}
if(strcmp(A,B)==0&&cnta==cntb)
printf("YES 0.%s*10^%d",A,cnta);
else
printf("NO 0.%s*10^%d 0.%s*10^%d",A,cnta,B,cntb);
}