返回目录
题意
给出两个数,问将它们写成保留n位小数的科学计数法后是否相等。如果相等,则输出“YES”,并给出转换结果;如果不相等,则输出“NO”,并分别给出两个数转换后的结果。
样例(可复制)
3 12300 12358.9
//output
YES 0.123*10^5
提供几个易出错的数据
4 0000 0000.00 //YES 0.0000*10^0
4 00123.5678 00001235 //NO 0.1235*10^3 0.1235*10^4
3 0.0520 00.0521 //NO 0.5200*10^-1 0.521*10^-1
3 123.5678 123 //YES 0.123*10^3
注意点
- 注意前导0和小数点后的0的剔除
- 输出时不足精度范围的时候需要补0
#include<bits/stdc++.h>
using namespace std;
int n;
string deal(string s,int& e){
int k=0;
while(s.size()>0&&s[0]=='0')s.erase(s.begin());
if(s[0]=='.'){
s.erase(s.begin());
while(s.size()>0&&s[0]=='0'){
s.erase(s.begin());
e--;
}
}else{
while(s[k]!='.'&&k<s.size()){
k++;
e++;
}
if(k<s.size())s.erase(s.begin()+k);
}
if(s.size()==0)e=0;
int num=0;
k=0;
string a;
while(num<n){
if(k<s.size())a+=s[k++];
else a+='0';
num++;
}
return a;
}
int main(){
string s1,s2,s3,s4;
int e1=0,e2=0;
cin>>n>>s1>>s2;
s3=deal(s1,e1);
s4=deal(s2,e2);
if(s3==s4&&e1==e2)cout<<"YES 0."<<s3<<"*10^"<<e1<<endl;
else cout<<"NO 0."<<s3<<"*10^"<<e1<<" 0."<<s4<<"*10^"<<e2<<endl;
return 0;
}