#include<iostream>
#include<string>
#include<cmath>
#include<cstring>
#include<iomanip>
using namespace std;
int main()
{
string s1,s2;
int n;
cin>>n>>s1>>s2;
int count1=0,count2=0;
for(int i=0;i<s1.size();i++){
if(s1[i]=='.'){
break;
}else{
count1++;
}
}
for(int i=0;i<s2.size();i++){
if(s2[i]=='.'){
break;
}else{
count2++;
}
}
if(count1==count2){
double ans1=0,ans2=0;
for(int j=0;j<count1&&j<n;j++){
ans1+=(s1[j]-'0')*(pow(10,-(j+1)));
ans2+=(s2[j]-'0')*(pow(10,-(j+1)));
}
if(ans1==ans2){
cout<<"YES"<<' ';
cout<<setiosflags(ios::fixed)<<setprecision(n)<<ans1;
cout<<"*"<<10<<"^"<<count1<<endl;
}else{
cout<<"NO"<<' ';
cout<<setiosflags(ios::fixed)<<setprecision(n)<<ans1;
cout<<"*"<<10<<"^"<<count1<<' ';
cout<<setiosflags(ios::fixed)<<setprecision(n)<<ans2<<"*"<<10<<"^"<<count2<<endl;
}
}else{
double ans1=0,ans2=0;
for(int j=0;j<count1&&j<n;j++){
ans1+=(s1[j]-'0')*(pow(10,-(j+1)));
}
for(int j=0;j<count2&&j<n;j++){
ans2+=(s2[j]-'0')*(pow(10,-(j+1)));
}
cout<<"NO"<<' ';
cout<<setiosflags(ios::fixed)<<setprecision(n)<<ans1;
cout<<"*"<<10<<"^"<<count1<<' ';
cout<<setiosflags(ios::fixed)<<setprecision(n)<<ans2<<"*"<<10<<"^"<<count2<<endl;
}
return 0;
}
1、cout保留输出n位小数的用法
2、这道题输出也应该用字符串,因为double没办法保留这么长的小数位,网上查的精度是14位小数,这道题极限却达到100