PAT 乙级真题 1014.科学计数法

Posted fsh001

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT 乙级真题 1014.科学计数法相关的知识,希望对你有一定的参考价值。

PAT 乙级真题 1014.科学计数法

题目描述

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

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

输入格式

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

输出格式

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

输入样例

+1.23400E-03

输出样例

0.00123400

题目思路

暴力算法,E后为负数时输出时往前面补0,E后为正数时,将字符数组向后移位处理。

#include<iostream>
#include<algorithm>
using namespace std;

const int N = 1e4 + 10;
char a[N], b[N];

int main()
{
    scanf("%s", a);
    if (a[0] == '-')printf("-");
    int i = 1, seed = 0, m = 0;
    while (a[i] != 'E')
    {
        b[i - 1] = a[i];
        i++;
    }
    int len = i - 2;
    if (a[++i] == '+')
        seed = 1;
    m += a[++i] - 48;
    while (a[++i])
    {
        m *= 10;
        m += a[i] - 48;
    }
    i = 0;
    while (b[i++] != '.');
    int j = i - 1;
    if (seed)
    {
        while (j < i + m - 1) {
            b[j] = b[j + 1];
            j++;
        }
        b[i + m - 1] = '.';
        i = i + m - 1;
        m = i;
        for (; i >= 0; --i)
        {
            if (b[i] == '')b[i] = '0';
        }
        if (m - 1 > len)
        {
            b[m] = '';
        }
        else
        {
            for (j = m; j < len + 1; j++)
            {
                if(b[j]=='')
                    b[j] = '0';
            }
            b[j] = '';
        }
        printf("%s", b);
    }
    else
    {
        swap(b[0], b[1]);
        if (m == 1)
        {
            printf("0%s", b);
        }
        else
        {
            printf("0.");
            for (i = 1; i < m; i++)printf("0");
            printf("%s", b+1);
        }
    }
    return 0;
}

以上是关于PAT 乙级真题 1014.科学计数法的主要内容,如果未能解决你的问题,请参考以下文章

PAT乙级 1024. 科学计数法 (20)

PAT乙级1024 科学计数法 (20 分)

PAT乙级1024

PTA PAT乙级真题,95题(C++,AC代码)

PAT乙级(Basic Level)真题训练

PAT 乙级 1014