美文网首页
【PAT_1056】 Scientific Notation

【PAT_1056】 Scientific Notation

作者: 6J | 来源:发表于2018-07-21 18:41 被阅读0次

题目描述

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+,即数字的整数部分只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出。
以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留。

输入

科学计数法表示的实数A。数字A的存储长度不超过9999字节,且其指数的绝对值不超过9999。

输出

按普通数字表示法输出A,并保证所有有效位都被保留,包括末尾的0。

解题思路

分析样例:
指数为负时:
+1.23400E-03 =1.2340010-03=0.00123400
指数为正时:
+1.23400E+03=1.23400
1003=1234.00
所以本题需要分正负来讨论。
1.当指数为正数时,将小数点后移指数位,当数字不足时,加(指数-数字长度)个0.
2.当指数位负数时,前移指数位,即在数字签名加指数位个0;
利用一个vector存储E前面的数字。

代码


#include<stdio.h>
#include<iostream>
#include<string>
#include<vector>

using namespace std;


int main() {
    string input;
    cin >> input;
    bool ispos = true;
    bool first = true;
    vector<char> datas;
    bool index_mark = true;
    int index = 0;
    int point;
    if (input[0] == '-')ispos = false;
    for (int i = 1; i < input.size(); i++) {
        if (first) {
            if (input[i] == 'E') {
                first = false;
                if (input[i + 1] == '-')index_mark = false;
                i++;
            }
            else if ((input[i] == '.')) {
                point = i;
            }
            else{
                datas.push_back(input[i]);
            }
        }
        else {
            index = index * 10 + input[i]-'0';
        }
    }
    cout << index << endl;
    //int len = datas.size();
    if (!ispos)cout << "-";
    if (index_mark) {
        for (int i = 0; i < index; i++) {
            if (i < datas.size()) {
                cout << datas[i];
            }
            else {
                cout << "0";
            }
        }
        if (index < datas.size()) {
            cout << ".";
            for (int i = index; i < datas.size(); i++) {
                cout << datas[i];
            }
        }
        cout << endl;
    }
    else {
        //cout << "-0.";
        for (int i = 0; i < index; i++) {
            if (i == 0) {
                cout << "0.";
            }
            else {
                cout << "0";
            }
        }
        for (int i = 0; i < datas.size(); i++) {
            cout << datas[i];
        }
        cout << endl;
    }
    return 0;
}


是6J,爱吃爱玩爱笑的非典型程序~~~媛

相关文章

网友评论

      本文标题:【PAT_1056】 Scientific Notation

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