1060 Are They Equal (25分)
image.png分析:
给出两个数,写成保留n位小数的科学技术法后判断是否相等。
C++:
#include <iostream>
#include <string>
using namespace std;
int n;//有效位数
string deal(string s, int &e) {
int k = 0;//s的下标
while (s.length() > 0 && s[0] == '0') {
s.erase(s.begin());//去掉前导0
}
if (s[0] == '.') {//s为小数
s.erase(s.begin()); //去掉小数点
while (s.length() > 0 && s[0] == '0') {
s.erase(s.begin());//去掉小数点后非0位前的所有0
e--;
}
} else {
while (k < s.length() && s[k] != '.') {
k++;
e++;
}
if (k < s.length()) {
s.erase(s.begin() + k);//删小数点
}
}
if (s.length() == 0) {
e = 0;
}
int num = 0;
k = 0;
string res;
while (num < n) {
if (k < s.length()) {
res += s[k++];//只要还有数字就加到res末尾
} else {
res += '0';//否则加0到res末尾
}
num++;//精度加1
}
return res;
}
int main() {
string a, b, c, d;
cin >> n >> a >> b;
int e1 = 0, e2 = 0;//a和b的指数
c = deal(a, e1);
d = deal(b, e2);
if (c == d && e1 == e2) {//主体相同且指数相同,输出YES
cout << "YES 0." << c << "*10^" << e1 << endl;
} else {
cout << "NO 0." << c << "*10^" << e1 << " 0." << d << "*10^" << e2 << endl;
}
return 0;
}
网友评论