很明显我写得太冗余了。。
简单说明一下吧。。我以为0就是输出0这个点错了一个,0要输出3 0 0要输出0.000*10^0。。还有一个点是前导0.如00123,。。这个点我真没想到。。
其他点情况就很简单了。。分成小于1和大于1处理就能过
#include<iostream>#include<string>using namespace std;string k;int x,n;void fun(string& a){ if(a=="0"){ k="0"; return; } int flag1=0; int leng=a.size(); for(int i=0;i<leng;++i) if(a[i]!='0'&&a[i]!='.') flag1=1; if(!flag1){ k="0"; return; } int t=0; while(t<a.size()-1&&a[t]=='0'&&a[t+1]!='.') a.erase(a.begin()); int len=a.size(); int flag=1,pos=len; for(int i=0;i<len;++i) if(a[i]=='.'){ pos=i; flag=0; break; } if(flag) a+='.'; int y=100; while(y--) a+='0'; len=a.size(); if(a[0]=='0'&&pos==1){ for(int i=2;i<len;++i) if(a[i]=='0') x--; else{ pos=i; break; } for(int i=pos;i<pos+n;++i) k+=a[i]; } else{ x=pos; int temp=0; for(int i=0;i<len;++i){ if(a[i]!='.'){ k+=a[i]; temp++; if(temp==n) break; } } }}int main(){ string a,b,w,t; int f,s; cin>>n>>a>>b; fun(a); w=k;f=x; k.clear(); x=0; fun(b); t=k;s=x; if(w==t&&f==s){ cout<<"YES"<<' '; if(w=="0"){ cout<<"0."; for(int i=0;i<n;++i) cout<<"0"; cout<<"*10^"<<f; } else{ cout<<"0."; cout<<w; cout<<"*10^"<<f; } } else{ cout<<"NO"<<' '; if(w=="0"){ cout<<"0."; for(int i=0;i<n;++i) cout<<"0"; cout<<"*10^"<<f; } else{ cout<<"0."; cout<<w; cout<<"*10^"<<f; } cout<<' '; if(t=="0"){ cout<<"0."; for(int i=0;i<n;++i) cout<<"0"; cout<<"*10^"<<f; } else{ cout<<"0."; cout<<t; cout<<"*10^"<<s; } } return 0;}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
新闻热点
疑难解答