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.9Sample Output 1:
YES 0.123*10^5Sample Input 2:
3 120 128Sample Output 2:
NO 0.120*10^3 0.128*10^3
字符串转科学计数法,转换函数需要根据输入的字符串和有效位数返回两个值:n位底数,指数次数。
/*2015.7.28cyq*/ #include <iostream> #include <string> using namespace std; //result返回n位有效数字,函数返回值为指数次数 int toStdForm(const string s,int n,string &result){ int len=s.size(); //获取有效数字 int i=0; while(i<len&&(s[i]=='0'||s[i]=='.'))//去掉前缀0和. i++; if(i==len){ for(int j=0;j<n;j++) result+='0'; return 0; } int count=0;//n个有效数字 while(i<len){ if(s[i]!='.'){ result+=s[i]; count++; if(count==n) break; } i++; } while(count<n){ result+='0'; count++; } //获取指数次数 i=0; int exp=0; while(i<len&&s[i]=='0')//去掉前缀0 i++; while(i<len&&s[i]!='.'){ exp++; i++; } if(exp>0)//整数部分有exp位 return exp; if(s[i]=='.') i++; while(i<len&&(s[i]=='0')){//小数部分的前缀0个数 exp--; i++; } return exp; } int main(){ int N; string s1; string s2; cin>>N>>s1>>s2; string base1,base2; int exp1=toStdForm(s1,N,base1); int exp2=toStdForm(s2,N,base2); if(base1==base2&&exp1==exp2){ cout<<"YES 0."<<base1<<"*10^"<<exp1; }else{ cout<<"NO"; cout<<" 0."<<base1<<"*10^"<<exp1; cout<<" 0."<<base2<<"*10^"<<exp2; } return 0; }