• 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 <iostream>
    #include <map>
    #include <vector>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    string str;
    int main()
    {
        cin>>str;
        int length=str.length();
        int z;
        if(str[0]=='-')
            z=-1;
        else
            z=1;
        int dot=0,e=0,eh=0;
        //int length=str.length();
        for(int i=0;i<length;i++)
        {
            if(str[i]=='.')dot=i;
            if(str[i]=='E')e=i;
        }
        int t=0,sum=0;
    
        for (int i = length-1; i >=e+2 ; i--) {
            sum+=(str[i]-'0')*pow(10,t);
            t++;
        }
        int h=0;
        if(str[e+1]=='-')h=-1;
        else h=1;
        if(z==-1)cout<<"-";
        if(h==-1)
        {
            if(str[1]=='0')
            {
                 cout<<"0.";
                 //cout<<sum;
                 //cout<<dot;
                 for(int i=0;i<sum;i++)
                     cout<<"0";
                 for(int i=dot+1;i<length;i++)
                 {
                     if(str[i]=='E')break;
                     else
                         cout<<str[i];
                 }
            }
            else
            {
                int num=dot-1;
                if(sum<num){
                    //int dott=num-sum;
                    for(int i=1;i<=dot-sum-1;i++)
                    {
                        cout<<str[i];
                    }
                    cout<<".";
                    for(int i=dot-sum;i<length;i++){
                        if(str[i]=='.')continue;
                        else if(str[i]=='E')break;
                        else cout<<str[i];
                    }
                } else{
                    cout<<"0.";
                    for(int i=0;i<sum-num;i++)
                        cout<<"0";
                    for(int i=1;i<length;i++)
                    {
                        if(str[i]=='.')continue;
                        else if(str[i]=='E')break;
                        else
                            cout<<str[i];
                    }
                }
            }
        } else
        {
            int mid=e-dot-1;
            //cout<<sum<<" "<<mid;
            if(str[1]=='0'){
                if(mid>=sum){
                int flag=0;
                for(int i=dot+1;i<=dot+sum;i++){
                    if(str[i]!='0'){
                        flag=1;
                        cout<<str[i];
                    }
                }
                if(flag==0)cout<<"0";
                if(mid!=sum)
                 cout<<".";
                for(int i=dot+sum+1;i<=e-1;i++)
                    cout<<str[i];
                }
                else{
                   for(int i=1;i<length;i++) {
                       if (str[i] == 'E')break;
                       else if (str[i] == '.')continue;
                       else {
                           if (str[i] != '0')cout << str[i];
                       }
                   }
                           int h=sum-mid;
                           for(int i=0;i<h;i++)cout<<"0";
                       }
            }
            else
            {
                if(mid<=sum)
                {
                    for(int i=1;i<length;i++)
                    {
                        if(str[i]=='.')continue;
                        else if(str[i]=='E')break;
                        else
                            cout<<str[i];
                    }
                    for(int i=0;i<sum-mid;i++)
                        cout<<"0";
                } else
                {
                    for(int i=1;i<length;i++)
                    {
    
                        if(str[i]=='.')continue;
                        else if(str[i]=='E')break;
                        else
                           cout<<str[i];
                        if(i==dot+sum)cout<<".";
                    }
                }
            }
        }
        //cout<<sum<<" "<<e<<" "<<length;
        return 0;
    
    }

    看到网上一些题解过了所有测试点,但是还是有bug,我来答一波自认为满分的题解,欢迎hack。

  • 相关阅读:
    个人工作总结6
    使用java对文件批量重命名
    导入csv文件到数据库
    关于微信小程序的Request请求错误处理
    基于jPlayer的三分屏制作
    条件查询时,如果有的输入框不输入,后台应该怎么处理?
    mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
    C++&&Objective-c
    加载ttf字体
    ios6去除高光效果,和判断iphone或ipad设备
  • 原文地址:https://www.cnblogs.com/zuiaimiusi/p/11368813.html
Copyright © 2020-2023  润新知