题目比较简单,主要注意测试几个特殊用例。
看到网上基本大家写的都是将有效位放在另外数组里面存放,这样也不错。
//1060. Are They Equal (25)
//测试用例:
// 4 05.032 5.032 数字前面为0的情况;
// 3 0 0.0
// 3 3.87 3.87000
#include <iostream>
#include <string>
#include <functional>
using namespace std;
int N;
string a, b;
int BStart = -1;
int BPoint = -1;
int AStart = -1;
int APoint = -1;
void outB()
{
int count = 0;
int i;
for (i = BStart;i<b.size();i++)
{
if (count == N)
{
break;
}
if (b[i] == '.')
{
continue;
}
cout << b[i];
count++;
}
while (count < N)
{
count++;
cout << "0";
}
if (BPoint < BStart)
{
BPoint++;
}
cout << "*10^" << BPoint - BStart;
}
void outA()
{
int i;
int count = 0;
for (i = AStart;i<a.size();i++)
{
if (count == N)
{
break;
}
if (a[i] == '.')
{
continue;
}
cout << a[i];
count++;
}
while (count < N)
{
count++;
cout << "0";
}
if (APoint < AStart)
{
APoint++;
}
cout << "*10^" << APoint - AStart;
}
int main(void)
{
#ifdef ONLINE_JUDGE
#else
freopen("D:\\1.txt", "r", stdin);
#endif
cin >> N >> a >> b;
APoint = a.size();
BPoint = b.size();
int i = 0;
for (i = 0;i<a.size();i++)
{
if (AStart !=-1 && APoint != a.size())
{
break;
}
if (a[i] == '.')
{
APoint = i;
}
if (a[i]!='.' && a[i] != '0' && AStart == -1)
{
AStart = i;
}
}
for (i = 0;i<b.size();i++)
{
if (BStart !=-1 && BPoint != b.size())
{
break;
}
if (b[i] == '.')
{
BPoint = i;
}
if (b[i] != '.' && b[i] != '0' && BStart == -1)
{
BStart = i;
}
}
int count = 0;
if (AStart == -1)
{
if (BStart == -1)
{
cout << "YES 0.";
for (int j =0 ;j<N;j++)
{
cout<<"0";
}
cout << "*10^0";
}
else
{
cout << "NO 0.";
for (int j =0 ;j<N;j++)
{
cout<<"0";
}
cout << "*10^0 0.";
outB();
}
return 0;
}
if (AStart!=-1 && BStart == -1)
{
cout << "NO 0.";
count = 0;
for (i = AStart;i<a.size();i++)
{
if (count == N)
{
break;
}
if (a[i] == '.')
{
count--;
}
cout << a[i];
count++;
}
while (count < N)
{
count++;
cout << "0";
}
if (APoint < AStart)
{
APoint++;
}
cout << "*10^" << APoint - AStart;
cout << " 0.";
for (i = 0;i<N;i++)
{
cout << "0";
}
cout << "*10^0";
return 0;
}
bool flag = true;
//if (AStart == BStart && APoint == BPoint)
int j;
if(BPoint - BStart == APoint - AStart)
{
for (i = AStart; i<a.size();i++)
{
j = BStart - AStart + i;
if (j == b.size())
{
break;
}
if (count == N)
{
break;
}
if (a[i] == '.')
{
continue;
}
char t1 = a[i];
char t2 = b[j];
if (a[i] != b[j])
{
flag = false;
break;
}
count++;
}
if (count < N)
{
if (j == b.size() && i < a.size())
{
for (;i<a.size();i++)
{
if (count == N)
{
break;
}
if (a[i] != '0')
{
flag = false;
break;
}
count++;
}
}
if (i == a.size() && j < b.size())
{
for (;j<b.size();j++)
{
if (count == N)
{
break;
}
if (b[i] != '0')
{
flag = false;
break;
}
count++;
}
}
}
if (flag)//判断后面N为是否相同
{
printf("YES 0.");
outB();
return 0;
}
}
printf("NO 0.");
outA();
cout << " 0.";
outB();
return 0;
}