说一下本题可能误会的点,这个给定的数值是以浮点数形式表示的。
所以出现0.000也是有的,不考虑这个最后一个测试点会出错,此外本问题中需要考虑前导0的问题出现000123这种也很正常。。。不注意这个同样部分测试点会不过
#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string str1,str2,str3,str4;
int n,e1=0,e2=0;
string deal(string s,int &e)
{
string temp;
while(s[0]=='0'&&s.length()>0)
{
s.erase(s.begin());
}
if(s[0]=='.')
{
s.erase(s.begin());
while(s.length()>0&&s[0]=='0')
{
s.erase(s.begin());
e--;
}
}
else
{
while(e<s.length()&&s[e]!='.')
{
e++;
}
if(e<s.length())
s.erase(s.begin()+e);
}
if(s.length()==0)
e=0;
for (int i=0;i<n;i++)
{
if(i<s.length())temp+=s[i];
else temp+='0';
}
return temp;
}
int main()
{
cin>>n>>str1>>str2;
str3=deal(str1,e1);
str4=deal(str2,e2);
if(str3==str4&&e1==e2)
cout<<"YES "<<"0."<<str3<<"*10^"<<e1;
else
cout<<"NO "<<"0."<<str3<<"*10^"<<e1<<" 0."<<str4<<"*10^"<<e2;
}