美文网首页
PAT甲级A1060---string的常见用法

PAT甲级A1060---string的常见用法

作者: 1nvad3r | 来源:发表于2020-07-22 22:22 被阅读0次

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;
}

相关文章

网友评论

      本文标题:PAT甲级A1060---string的常见用法

      本文链接:https://www.haomeiwen.com/subject/qiczkktx.html