1060. Are They Equal (25)
关于指数的求法:找到小数点的位置和第一个非零位置,如果小数点位置大于非零位置,那么指数就是dotpos-notzeropos,否则,还要加1,即dotpos-notzeropos+1(读者可以自己尝试推算)
#include <bits/stdc++.h>
using namespace std;
string MakeNumber(string num,int n)
{
size_t found=num.find('.');
size_t dotpos=(found==string::npos)?num.size():found;
size_t notzeropos=0;
while(notzeropos<num.size()&&(num[notzeropos]=='0'||num[notzeropos]=='.'))++notzeropos;
if(notzeropos==num.size())
return string("0.")+string(n,'0')+string("*10^0");
int exp=(dotpos>notzeropos)?dotpos-notzeropos:dotpos-notzeropos+1;
if(found!=string::npos)
num.erase(found,1);
size_t pos=0;
while(pos<num.size()&&num[pos]=='0')++pos;
num=num.substr(pos);
if(num.size()<(size_t)n)
num=num+string((size_t)n-num.size(),'0');
else num=num.substr(0,n);
return string("0.")+num+"*10^"+to_string(exp);
}
int main()
{
int n;
string a,b;
cin>>n>>a>>b;
string ansa=MakeNumber(a,n),ansb=MakeNumber(b,n);
if(ansa==ansb) cout<<"YES "<<ansa<<endl;
else cout<<"NO "<<ansa<<" "<<ansb<<endl;
return 0;
}