PAT:1060. Are They Equal (25) AC
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int n;
string deal(string s,int &e) //【思维】1:吸收多余0:。2:找到“.”判断与1的大小。3:去除“.”的同时统计10的指数(正负与step2有关)
{ //4:判断是否删完了,删完了表明数字是0。5:存入前n个数字,不足用0补。返回
int k=0;
while(s.size()>0 && s[0]=='0') //吸收.前面多余的0
s.erase(s.begin());
if(s[0]=='.') //Situation1:数字小于1
{
s.erase(s.begin()); //删除“.”
while(s.size()>0 && s[0]=='0') //吸收.前面多余的0
{
s.erase(s.begin());
--e; //指数为负
}
}
else //Situation2:数字大于1
{
while(k<s.size() && s[k]!='.') //数小数点前有几位
{
++k;
++e;
}
if(k<s.size()) //删除“.”
s.erase(s.begin()+k);
}
if(s.size()==0) //这个数为0
e=0;
k=0; //下标归零
int num=0;
string str;
while(num<n) //将前n位有效数字存入str
{
if(k<s.size())
str+=s[k++]; //后面接上
else
str+='0';
++num;
}
return str;
}
int main()
{
string s1,s2,s3,s4;
cin>>n>>s1>>s2;
int e1=0,e2=0; //s1,s2的指数
s3=deal(s1,e1);
s4=deal(s2,e2);
if(s3==s4 && e1==e2)
cout<<"YES 0."<<s3<<"*10^"<<e1<<endl;
else
cout<<"NO 0."<<s3<<"*10^"<<e1<<" 0."<<s4<<"*10^"<<e2<<endl;
return 0;
}