PAT 乙级1024 科学计数法

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


 

#include<stdio.h>
#include<iostream>
using namespace std;
int main() {
    string s;
    int k,kk;
    while(getline(cin,s)) {
        int e=0,t;
        string shu="";
        if(s[0]=='+')k=1;
        else k=-1;

        for(int i=1; i<s.size(); i++) {
            if(s[i]=='E') {
                t=i;
                break;
            } else if(s[i]=='.'){
                continue;
            }else {
                shu+=s[i];
            }
        }
        if(s[t+1]=='+')kk=1;
        else kk=-1;
        for(int i=t+2; i<s.size(); i++) {
            e=e*10+s[i]-48;
        }
        //t-3就是点到e中有几个
        if(k==-1){
            cout<<"-";
        }
        if(kk==1){
            if(t-3<e){
                cout<<shu;
                e=e-t+3;
                while(e--){
                cout<<"0";    
                }
            }else if(t-3==e){
                cout<<shu;
            }
            else{
                for(int i=0;i<=e;i++){cout<<shu[i];}
                cout<<".";
                for(int i=e+1;i<shu.size();i++){cout<<shu[i];}
            }
            cout<<endl;
        }
        else if(kk==-1){
            cout<<"0"<<".";
            e=e-1;
            while(e--){
            cout<<"0";    
            }
            for(int i=0;i<shu.size();i++){cout<<shu[i];}
            cout<<endl;
        }
    }



}

猜你喜欢

转载自blog.csdn.net/paycho/article/details/84555990