PAT 甲级 1073 Scientific Notation

字符串与数字的转换以及字符串的截取、查找、插入和删除

#include <iostream>
#include <string>
#include <cmath>

using namespace std;

int main() {
    string s;
    cin >> s;
    int posE = s.find('E');
    string n = s.substr(0, posE);
    string e = s.substr(posE + 1);

    if (n[0] == '-')
        cout << '-';
    n.erase(0, 1);

    int ei = stoi(e);
    int posDot = n.find('.');
    if (ei < 0) {
        n.erase(posDot, 1);
        int beg0 = abs(ei);  // 要在字符串前插入的0的个数
        string s0(beg0, '0');
        n.insert(0, s0);
        n.insert(1, ".");  // 插入小数点,注意只能插入字符串
    }
    else if (ei > 0) {
        int end0 = ei - (n.size() - 1 - posDot);  // 要在字符串末尾插入的0的个数
        if (end0 > 0) {
            string s0(end0, '0');
            n.insert(n.size(), s0);  // 在末尾插入0,注意是 n.size() ,不是 n.size() - 1
        }
        n.erase(posDot, 1);
        if (posDot + ei != n.size()) {
            n.insert(posDot + ei, ".");  // 最后一位不是小数点就插入小数点
        }
    }

    cout << n;

    return 0;
}

猜你喜欢

转载自blog.csdn.net/seesniper/article/details/82588340
今日推荐