很明顯我寫(xiě)得太冗余了。。
簡(jiǎn)單說(shuō)明一下吧。。我以為0就是輸出0這個(gè)點(diǎn)錯(cuò)了一個(gè),0要輸出3 0 0要輸出0.000*10^0。。還有一個(gè)點(diǎn)是前導(dǎo)0.如00123,。。這個(gè)點(diǎn)我真沒(méi)想到。。
其他點(diǎn)情況就很簡(jiǎn)單了。。分成小于1和大于1處理就能過(guò)
#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
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注