PAT乙级1024

来源:互联网 发布:淘宝卖家认证在哪里 编辑:程序博客网 时间:2024/06/05 00:22

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][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

思想:将+[1-9]“.”[0-9]+存在temp1中,后半部分存到temp2中,然后根据指数大小与尾数长度之间的关系来设计,当指数为负时必定源字符串前有0,后面再加几个0就要看指数绝对值的大小了;当指数为正时,并且指数绝对值大小大于等于尾数长度,后面添两者之差个0,无小数点,但是指数绝对值大小小于尾数长度的话,就要在指数绝对值大小个数字后加小数点。在这个题上,我把整数部分0也考虑进去了,就是注释的部分,但是这很浪费时间也增加了难度,再次强调下要读清题并读懂题,不要自己臆想,这样不仅可能偏离出题人的意图而且又浪费时间,最后还做不对!!!然后,最后说明下,有些人第6个测试点过不了,是因为char数组开小了,增大到100000就可以。

// 1024.cpp : 定义控制台应用程序的入口点。////#include "stdafx.h"#include<iostream>using namespace std;int main(){    char A[100000];    cin >> A;    char temp1[100000];    char temp2[100000];    int i = 0;    while (A[i] != 'E')        {            temp1[i] = A[i];            i++;        }    temp1[i] = '\0';    int j = 0;    while (A[i] != '\0')    {        temp2[j] = A[i];        j++;        i++;    }    temp2[j] = '\0';    int sum = 0;    j = 2;    while (temp2[j] != '\0')    {        sum = sum * 10 + temp2[j]-'0';        j++;    }    j = 0;    if (temp1[0] == '-')        cout << "-";    if (sum == 0)    {        j = 1;        while (temp1[j] != '\0')        {            cout << temp1[j];            j++;        }        return 0;    }    if (temp2[1] == '-')    {        cout << "0.";        sum--;        while (sum > 0)        {            cout << "0";            sum--;        }            j = 1;            while (temp1[j]!= '\0')            {                if(temp1[j]!='.')                cout << temp1[j];                j++;            }    }    else    {        sum+=2;        j = 1;// int k = 0;        //char temp3[10000];        while (temp1[j] != '\0')        {            //if (temp1[1] != '0')            //{                if (temp1[j] != '.')                    cout << temp1[j];                j++;                sum--;                if (sum == 0 && temp1[j] != '\0')                    cout << ".";            //}        }            /*else            {                if (temp1[j] != '.')                    temp3[k++] = temp1[j];                j++;                sum--;                if (sum == 0&&temp1[j] != '\0')                    temp3[k++] = '.';            }        }        temp3[k] = '\0';        k = 0;        while(temp3[k]!='\0')        {            if (temp3[k] != '0')            {                if (temp3[k] == '.')                    cout << '0';                while (temp3[k] != '\0')                {                    cout << temp3[k++];                }            }            else                k++;        }*/        while (sum>0)        {            cout << "0";            sum--;        }    }    return 0;}
0 0
原创粉丝点击