#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
int n;
cin>>n;
string a,b;
cin>>a>>b;
vector<char> suma;
vector<char> sumb;
int kinda=0;
int kindb=0;
int flaga=0,flagb=0;
if(a.find(".")!=string::npos)
{
if(a[a.find(".")-1]=='0'&&a[a.find(".")]==1)
{
int flag=0;
kinda=1;
for(int i=0;i<a.length();i++)
{
if(a[i]!='0'&&a[i]!='.')
{
flag=i;break;
}
}
flaga=(flag-2)*-1;
for(int i=flag;i<a.length();i++)
suma.push_back(a[i]);
}
else if(a[a.find(".")-1]!='0'||a[a.find(".")-1]!=1)
{
kinda=2;
for(int i=0;i<a.length();i++)
{
if(a[i]!='.')
{
suma.push_back(a[i]);
}
}
flaga=a.find(".");
}
}
else if(a.find(".")==string::npos)
{
kinda=3;
for(int i=0;i<a.length();i++)
{
suma.push_back(a[i]);
}
flaga=a.length();
}
/*_____________________________________________________________________________*/
if(b.find(".")!=string::npos)
{
if(b[b.find(".")-1]=='0'&&b[b.find(".")]==1)
{
int flag=0;
kindb=1;
for(int i=0;i<b.length();i++)
{
if(b[i]!='0'&&b[i]!='.')
{
flag=i;break;
}
}
flagb=(flag-2)*-1;
for(int i=flag;i<b.length();i++)
sumb.push_back(b[i]);
}
else if(b[b.find(".")-1]!='0'||b[b.find(".")-1]!=1)
{
kindb=2;
for(int i=0;i<b.length();i++)
{
if(b[i]!='.')
{
sumb.push_back(b[i]);
}
}
flagb=b.find(".");
}
}
else if(b.find(".")==string::npos)
{
kindb=3;
for(int i=0;i<b.length();i++)
{
sumb.push_back(b[i]);
}
flagb=b.length();
}
int right=1;
for(int i=0;i<n;i++)
{
if(flaga!=flagb)
{
right=0;
break;
}
if(suma.size()!=sumb.size()&&(n>=suma.size()||n>=sumb.size()))
{
right=0;
break;
}
else
{
if(suma[i]!=sumb[i])
{
right=0;
break;
}
}
}
if(right==0)
{
cout<<"NO "<<"0.";
int k=suma.size()<=n?suma.size():n;
for(int i=0;i<k;i++)
cout<<suma[i];
cout<<"*10^"<<flaga<<' ';
k=sumb.size()<=n?sumb.size():n;
cout<<"0.";
for(int i=0;i<k;i++)
cout<<sumb[i];
cout<<"*10^"<<flagb;
}
else
{
cout<<"YES "<<"0.";
int k=suma.size()<=n?suma.size():n;
for(int i=0;i<k;i++)
cout<<suma[i];
cout<<"*10^"<<flaga;
}
return 0;
}
自己写的只有19分,大概有几个点没考虑到:
1.没有考虑到前导0 比如 00.01 / 0.010 判定成两个不同的数字
2.在输出比较时,若位数不够要自己填上,如:
5 0.1234 0.12345 答案应该是NO 0.12340* 10^0 / 0.1234510^0
我的答案是NO 0.1234 * 10^0 / 0.12345 *10^0
3.对0的输出也有问题 比如:
1 0.1 0 答案:NO 0.1 * 10^0 / 0.0 *10^0
我的答案是NO 0.0 * 10^1 /0.0 *10^1
总之这题因该是用string类来做,不过处理条件还是挺复杂的。。。能得19分说实话感觉还行了 😦