AcWing 1546. 它们是否相等
原题链接
中等
作者:
松鼠爱葡萄
,
2020-08-04 14:55:04
,
所有人可见
,
阅读 859
#include <iostream>
#include <cstring>
using namespace std;
string change(string a, int n)
{
// 找到小数点的位置,从0开始计数
int k = a.find(".");
// 如果字符串中没有 ".",在末尾给它加上一位 "."
if (k == -1) a += '.', k = a.find(".");
// 去除 ".",做成一个新的字符串s
string s = a.substr(0, k) + a.substr(k + 1);
// 去除前导0
while (s.size() && s[0] == '0') s = s.substr(1), k -- ;
// 如果字符串为空 代表s="0"
if (s.empty()) k = 0;
// 字符串长度比要求保留的位数要多, 则进行截取操作
if (s.size() > n) s = s.substr(0, n);
// 否则 在末尾补0
else s += string(n - s.size(), '0');
return "0." + s + "*10^" + to_string(k);
}
int main()
{
int n;
string a, b;
cin >> n >> a >> b;
a = change(a, n);
b = change(b, n);
if (a == b) cout << "YES " << a << endl;
else cout << "NO " << a << ' ' << b << endl;
return 0;
}