Smaple Input1:
3 12300 12358.9
Smaple Output1:
YES 0.123*10^5
Smaple Input2:
3 120 128
Smaple Output2:
NO 0.120*10^3 0.128*10^3
方法来自于《算法笔记》
#include <iostream>
#include <string>
using namespace std;
int n;
string process(string s,int& e){
int k=0;
while(int(s.length()) > 0 && s[0]=='0'){
s.erase(s.begin());//将前面的0去掉
}
if(s[0] =='.'){
s.erase(s.begin());
while(int(s.length()) > 0 && s[0]=='0'){//考虑到 0.00000000xxxx 这种情况
s.erase(s.begin());
e--;
}
}
else{
while(k < int(s.length()) && s[k] != '.'){
k++;
e++;
}
if(k < int(s.length())){//数字中包含,
s.erase(s.begin() + k);
}
}
if(s.length()==0){
e=0;
}
int num=0;
k=0;
string str;
while(num < n){
if(k < int(s.length()))
str+=s[k++];
else str+='0';
num++;
}
return str;
}
int main(){
string s1,s2,s3,s4;
cin >> n >> s1 >> s2;
int e1=0,e2=0; //精度
s3 = process(s1,e1);
s4 = process(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;
}