#include<iostream>
#include<string>
using namespace std;
struct Number{
string number;
int e;
Number(){
e=0;
}
};
Number trans(string s,int n)
{
Number ans;
int i=0;
while(s[i]=='0'&&s[i+1]!='.'){
i++;
}
s=s.substr(i,s.size()-i);
if(s.find(".")==string::npos){
ans.number="0."+s;
ans.e=ans.number.size()-2;
}else{
int cnt=0,i;
if(s[0]=='0'&&s[1]=='.'){
i=2;
while(s[i]=='0'){
i++;
cnt--;
}
s.erase(2,i-2);
if(s.size()==2) cnt=0;
ans.number=s;
ans.e=cnt;
}else{
i=0;
while(s[i]!='.'){
cnt++;
i++;
}
s.erase(i,1); //删去 .
ans.number="0."+s;
ans.e=cnt;
}
}
if(ans.number.size()>n+2){
ans.number=ans.number.substr(0,n+2);
}
while(ans.number.size()<n+2){
ans.number+="0";
}
return ans;
}
bool judege(Number a,Number b)
{
if(a.number==b.number&&a.e==b.e) return true;
else return false;
}
int main()
{
int n;
string s1,s2;
cin>>n>>s1>>s2;
Number num1=trans(s1,n);
Number num2=trans(s2,n);
if(judege(num1,num2)){
printf("YES");
printf(" %s*10^%d",num1.number.c_str(),num1.e);
}else{
printf("NO");
printf(" %s*10^%d",num1.number.c_str(),num1.e);
printf(" %s*10^%d",num2.number.c_str(),num2.e);
}
return 0;
}
可能写的啰嗦不清晰但我懒得改了