#题目
时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
HOU, Qiming
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 <math> <semantics> <mrow> <mo> [ </mo> <mo> + </mo> <mo> − </mo> <mo> ] </mo> <mo> [ </mo> <mn> 1 </mn> <mo> − </mo> <mn> 9 </mn> <mo> ] </mo> <mi mathvariant="normal"> &quot; </mi> <mi mathvariant="normal"> . </mi> <mi mathvariant="normal"> &quot; </mi> <mo> [ </mo> <mn> 0 </mn> <mo> − </mo> <mn> 9 </mn> <mo> ] </mo> <mo> + </mo> <mi> E </mi> <mo> [ </mo> <mo> + </mo> <mo> − </mo> <mo> ] </mo> <mo> [ </mo> <mn> 0 </mn> <mo> − </mo> <mn> 9 </mn> <mo> ] </mo> <mo> + </mo> </mrow> <annotation encoding="application&#47;x&#45;tex"> [+-][1-9]&quot;.&quot;[0-9]+E[+-][0-9]+ </annotation> </semantics> </math>[+][19]"."[09]+E[+][09]+,即数字的整数部分只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出。
现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留。
输入格式:
每个输入包含1个测试用例,即一个以科学计数法表示的实数A。该数字的存储长度不超过9999字节,且其指数的绝对值不超过9999。
输出格式:
对每个测试用例,在一行中按普通数字表示法输出A,并保证所有有效位都被保留,包括末尾的0。
输入样例1:

+1.23400E-03

输出样例1:

0.00123400

输入样例2:

-1.2E+10

输出样例2:

-12000000000

#分析:
很典型的模拟题了,我们把它分解来看:
1.实数部分
2.指数部分
对于实数部分,除了有“+”号不输出以外,其余全部要保留,唯一区别是根据指数部分的“+”、“-”,把“0”添在实数前面还是添在实数后面
对于指数部分,上面也说了,正负的区别主要是添0的位置,所以我们重点关注它的值
有了大致的思路,我们可以开始了
1.判断第一个符号,为“+”就跳过,为“-”输出"-",
2.设法"保存"中间的实数部分
3.根据指数的正负,决定添0的前后位置
4.根据指数的大小,再具体决定“.”的位置

#代码(cpp)

#include<iostream>
using namespace std;
int main(){
    string a;
    int k=0;
    int len=0;
    cin>>a;
    if(a[k++]=='-')
        cout<<"-";
    int  start=k; 
    while(a[k++]!='E');  
    int end=k-1;  
    for(int i=k+1;a[i]!='\0';i++)
        len = (a[i]-'0')+len*10;
    if(len==0)
        for(int i=start;i<end;i++)
            cout<<a[i];
    else if(a[k]=='-'){
            cout<<"0.";
            for(int i=0;i<len-1;i++)
                cout<<0;
            for(int i=start;i<end;i++)
                if(a[i]!='.')
                    cout<<a[i];
    }
    else if(a[k]=='+'){
        bool flag = false;
        for(int i=start;i<end;i++){
            if(a[i]!='.')
                cout<<a[i];
            else{
                flag = true;
                continue;
            }
            if(flag)
                len--;
            if(len==0 && i!=end-1)
                cout<<'.';
        }
        for(int i=0;i<len;i++)
            cout<<0;
    }
    return 0;
}