PTA(Basic Level)1024.科学计数法

随声附和 提交于 2019-12-01 13:26:03

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

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

输入格式:

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

输出格式:

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

输入样例 1:
+1.23400E-03
输出样例 1:
0.00123400
输入样例 2:
-1.2E+10
输出样例 2:
-12000000000
思路
  • 字符串处理的问题,重点是存储好E前的数字,还有就是要定好指数的大小

  • 一个容易错的点是指数比较小的时候,小数点是不能忽略的,要计算好关系在适当的时候输出小数点,距离+1.23E+00,此时的输出应该为1.23,如果一律按照指数比较大来处理,会有一个测试点TLE

代码
#include<bits/stdc++.h>
using namespace std;
char a[10100];
int main()
{
    bool negtive = true;
    char ch;
    int t;

    cin >> ch;
    if(ch == '+')   negtive = false;      //定正负
    std::vector<char> v;  //存放了除了小数点的E前的所有数字

    while(cin>>ch)
    {
        if(ch == 'E')
            break;
        if(ch != '.')
            v.push_back(ch);
    }  
    cin >> ch;
    bool exp_neg = false;
    if(ch == '-')   exp_neg = true;

    int exp = 0;
    while(cin>>ch)
    {
        exp = exp * 10 + (ch - '0');
    }  //得到指数
    if(!exp_neg)   //如果指数为正
    {
        if(negtive)
            cout << "-";
        if(exp > v.size() - 1)
        {
            for(int i=0;i<v.size();i++)
                cout << v[i];
            for(int i=0;i<exp-v.size()+1;i++)
                cout <<"0";   //指数比较大,可以忽略小数点的情况
        }else
        {
            cout << v[0];
            for(int i=1;i<v.size();i++)
            {
                if(i - 1 == exp)
                    cout << ".";
                cout << v[i];
            }
        }    //比如1.21E+00,此时指数尚不能大得忽略掉小数点
    }else   //指数为负
    {
        if(negtive)
            cout << "-";
        cout << "0.";
        for(int i=0;i<exp-1;i++)
            cout << "0";
        for(int i=0;i<v.size();i++)
            cout << v[i];
    }
    return 0;
}
引用

https://pintia.cn/problem-sets/994805260223102976/problems/994805297229447168

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!