/*
Sologala @github https://github.com/Sologala/PAT_OJ
PAT_oj No.1060_Are_They_Equal
*/
可以先把小数点移动最左边。 然后按要求 输出几位,不够补上0.
还要注意如果是000001.00001 这种需要把 整数部分前面的0清掉,但整数部分是 0的时候 ,比如 0.000001还需要把小数部分前面的0 清掉,清小数部分前面0 的时候 还需要将指数值-1。 在输出。
小数点的位置就是当前的指数。
ac_code
/*
Sologala @github https://github.com/Sologala/PAT_OJ
PAT_oj No.1060 Are They Equal
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
int c,ex1 =0,ex2 =0;
string N1,N2;
string R1,R2;
int main(){
cin>>c>>N1>>N2;
int i=0;
//清小数点前面的 0.
for(i=0; i < N1.length()&&N1[i]=='0';)
{
N1.erase(N1.begin()+i);
}
for(i=0; i < N2.length()&&N2[i]=='0';)
{
N2.erase(N2.begin()+i);
}
//找小数点并且删除小数点.
for(i =0; i < N1.length(); i++)
{
if(N1[i]=='.'){N1.erase(N1.begin()+i);break;}
}
ex1 =i;
for(i=0; i < N2.length(); i++)
{
if(N2[i]=='.'){ N2.erase(N2.begin()+i);break;}
}
ex2 =i;
//有可能 是小于的小数。 0.0000000001 这样需要把 剩余的0 清掉。
for(i=0; i < N1.length()&&N1[i]=='0';)
{
N1.erase(N1.begin()+i);
ex1--;
}
for(i=0; i < N2.length()&&N2[i]=='0';)
{
N2.erase(N2.begin()+i);
ex2--;
}
//如果是0 N1 N2 会变成空穿
if(N1.length()==0) ex1 =0;
if(N2.length()==0) ex2 =0;
//结果补充0
for(i=0;i<c;i++){
if(i<N1.length()&&N1[i]!='0'){
R1.push_back(N1[i]);
}
else R1.push_back('0');
}
for(i=0;i<c;i++){
if(i<N2.length()&&N2[i]!='0'){
R2.push_back(N2[i]);
}
else R2.push_back('0');
}
//输出
if(R1==R2&&ex1==ex2){
cout<<"YES ";
cout<<"0";
if(R1.length()){
cout<<"."<<R1<<"*10^"<<ex1;
}
}
else{
cout<<"NO ";
cout<<"0";
if(R1.length()){
cout<<"."<<R1<<"*10^"<<ex1;
}
cout<<" 0";
if(R2.length()){
cout<<"."<<R2<<"*10^"<<ex2;
}
}
return 0;
}