1060 Are They Equal 科学计数法比较
#include <string>
#include<math.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
string since(string sa) //科学计数法
{
int e,zero=0;
int index=0;
string sb;
bool sw=true;
for (int i = 0; i != sa.length(); i++) //用于去除输入数据前面所有没用的0
if (sa[0] == '0'&& sa[i] == '0' && sw == true)
{
zero++;
} else sw = false;
sa.erase(sa.begin(), sa.begin() + zero);
if (sa.length() == 0)//特殊情况 00000
{
for (int i = 0; i < n; i++)
sb += '0';
sb = "0." + sb + "*10^0";
return sb;
}
///分情况处理
if (sa[0]=='.')///小数的科学计数法
{
sa.erase(sa.begin());//去除'.'
for (int i = 0; i != sa.length(); i++)
{
if (sa[i] != '0')//记录小数点后第一个非0数的位置
{
index = i;
break;
}
if (i == sa.length() - 1 && sa[i] == '0') //特殊情况0.0000000.
{
for (int i = 0; i < n; i++)
sb += '0';
sb = "0." + sb + "*10^0";
return sb;
}
}
sa.erase(sa.begin(),sa.begin()+index);
while (sa.length() < n)
sa = sa + '0';
sb = "0." + sa.substr(0, n) + "*10^-" + std::to_string(index);
}
else //整数的科学计数法
{
for (int i = 0; i != sa.length(); i++)
{
if (sa[i] == '.')
{
index = i;
sa.erase(sa.begin() + i);
break;
}
else
index = sa.length();
}
while (sa.length() < n)
sa = sa + '0';
sb = "0." + sa.substr(0, n) + "*10^" + std::to_string(index);
}
return sb;
}
int main()
{
string s1,s2,s3,s4;
cin >> n >> s1 >> s2;
s3 = since(s1);
s4 = since(s2);
s3 == s4 ? cout << "YES "+s3<<endl: cout << "NO "+ s3 + " " + s4 << endl;
}