#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
void deal1(string &s)//处里前导0
{
while(s.size()>0&&*(s.begin())=='0')
{
s.erase(s.begin());
}
}
int deal2(string &s)
{
string::iterator it=s.begin();
if(*it=='.')//.xxxxx的情况
{
s.erase(it);
it=s.begin();
int exp=0;
while(it!=s.end()&&(*it)=='0')
{
s.erase(it);
exp--;
}
if(s.size()==0)//0.000等情况
exp=0;
return exp;
}else
{
while(*it!='.'&&it!=s.end())
it++;
if(it==s.end())//没有小数点的情况
return s.size();
else
{
int exp=it-s.begin();
s.erase(it);
return exp;
}
}
}
string str1,str2;
int n;
int main()
{
int e1,e2;
//freopen("in.txt","r",stdin);
cin>>n>>str1>>str2;
deal1(str1);
deal1(str2);
if(str1.size()>0)
e1=deal2(str1);
if(str2.size()>0)
e2=deal2(str2);
if(str1.size()==0&&str2.size()==0)
{
printf("YES 0.");
for(int i=0;i<n;i++)
printf("0");
printf("*10^0\n");//是0的时候也要按规定输出!
return 0;
}
if(str1.size()>n)
str1.erase(str1.begin()+n,str1.end());//删除有效位以后的数字
if(str2.size()>n)
str2.erase(str2.begin()+n,str2.end());//删除有效位以后的数字
if(e1==e2)
{
int flag=1;
for(int i=0;i<n&&i<str1.size()&&i<str2.size();i++)
if(str1[i]!=str2[i])
{
flag=0;
break;
}
if(flag)
printf("YES 0.%s*10^%d\n",str1.c_str(),e1);
else
printf("NO 0.%s*10^%d 0.%s*10^%d\n",str1.c_str(),e1,str2.c_str(),e2);
}else
printf("NO 0.%s*10^%d 0.%s*10^%d\n",str1.c_str(),e1,str2.c_str(),e2);
return 0;
}
PAT1060
最新推荐文章于 2021-05-10 13:10:09 发布