1024. 科学计数法 (20)

来源:互联网 发布:公共网络摄像头直播 编辑:程序博客网 时间:2024/05/29 17:52

本题要求:

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]”.”[0-9]+E[+-][0-9]+,即数字的整数部分只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出。

现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留。

输入格式:

每个输入包含1个测试用例,即一个以科学计数法表示的实数A。该数字的存储长度不超过9999字节,且其指数的绝对值不超过9999。

输出格式:

对每个测试用例,在一行中按普通数字表示法输出A,并保证所有有效位都被保留,包括末尾的0。

输入样例:

+1.23400E-03

输出样例:

0.00123400

解题思路 :

这道题要考虑如下四种情况:
1. 当指数为0时(solve_1)
2. 当指数为正数并且比小数部分的长度大或者等于时(solve_2)
3. 当指数为正数并且比小数部分的长度小时(solve_3)
4. 当指数为负数时(solve_4)

代码 :

#include <iostream>#include <string>using namespace std;string a;string b;string c;string d;int i = 1;int n = 0;int len;void solve_1() {    cout << b << endl;}void solve_2() {    i = 0;    bool flag = true;    n = n - len;    while (b[i] != '\0') {        if (flag && (b[i] == '0' || b[i] == '.')) {            i++;            continue;        }        flag = false;        if (b[i] != '.') {            cout << b[i];        }        i++;    }    i = 0;    while (i < n) {        cout << '0';        i++;    }    cout << endl;}void solve_3() {    i = 0;    bool flag = true;    while (b[i] != '\0') {        if (flag && b[i] == '0') {            i++;            continue;        }        flag = false;        if (i == n + 2) {            cout << '.';            cout << b[i];        } else if (b[i] == '.') {            cout << b[++i];        } else {            cout << b[i];        }        i++;    }}void solve_4() {    cout << "0.";    n--;    i = 0;    while (i < n) {        cout << '0';        i++;    }    i = 0;    while (b[i] != '\0') {        if (b[i] != '.') {            cout << b[i];        }        i++;    }    cout << endl;}int main() {    cin >> a;    bool isFuShu = false;    if (a[0] == '-') {        isFuShu = true;    }    i =1;    while (a[i] != 'E') {        b.push_back(a[i++]);    }    bool isZhengShu = false;    i++;    if (a[i] == '+') {        isZhengShu = true;    }    i++;    while (a[i] != '\0') {        c.push_back(a[i++]);    }    int j = 0;    while (c[j] != '\0') {        n *= 10;        n += c[j++] - '0';    }    if (isFuShu) {        cout << '-';    }    if (n == 0) {        solve_1();        return 0;    }    if (isZhengShu) {        len = b.length() - 2;        if (len <= n) {            solve_2();        } else {            solve_3();        }    } else {        solve_4();    }    return 0;} 
0 0
原创粉丝点击