说一下本题可能误会的点,这个给定的数值是以浮点数形式表示的。
所以出现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;
}
本文深入探讨了在计算机科学中处理浮点数比较的复杂性,特别关注于去除前导零、小数点后的零及指数表示法的标准化过程。通过C++实现的算法,详细解释了如何将浮点数转换为标准形式,并比较两个浮点数是否相等,包括处理0.000和000123这样的特殊情况。
572

被折叠的 条评论
为什么被折叠?



