0
点赞
收藏
分享

微信扫一扫

PAT 自学题解 B 1024/A 1073

最后的执着 2022-03-27 阅读 26

B 1024/A 1073

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int main()
{
    char s[1000001];//存放初始数据
    char m[1000001];//存放中间的数字
    char m1[1000];//存放指数的数字

    cin>>s;
    int b=0,t=0;//b代表指数的正负,t存放指数部分       0 代表正 1代表负
    if(s[0]=='-') cout<<"-";//输出该数字的正负号

    long long i,j=0;
    for( i=1;i<strlen(s);i++)
    {
        if(s[i]=='.') continue;
        if(s[i]=='E') break;
        m[j++]=s[i];
    }
    if(s[++i]=='-') b=1;
    int j1=0;//标志着指数部分第一次出现非0数字
    for(++i,j=0;i<strlen(s);i++)
    {
        if(s[i]!='0'||j1==1)
        {
            m1[j++]=s[i];
            j1=1;
        }
    }

    for(i=0;i<strlen(m1);i++)
    {
        t+=(m1[i]-'0');
        t*=10;
    }
    t=t/10;//用于存放指数int型
    if(b==0&&strlen(m)-1<=t)//说明此时没有小数点
    {
        for(i=0;i<strlen(m);i++)
        {
            cout<<m[i];
        }
        for(i=1;i<=t+1-strlen(m);i++)
            cout<<'0';
        return 0;
    }
    if(b==0)//指数是正数,有小数点的情况
    {
        for(i=0;i<=t;i++)
        {
            cout<<m[i];
        }
        cout<<".";
        int l1=strlen(m);
        for(;i<strlen(m);i++)
            cout<<m[i];
        return 0;
    }
    //指数是负数,说明肯定有小数点
    cout<<"0.";
    for(i=1;i<t;i++)
        cout<<'0';
    for(i=0;i<strlen(m);i++)
        cout<<m[i];



}
举报

相关推荐

0 条评论