做题记录--day51

PAT B1024

啊啊啊啊啊啊啊啊这个题卡了一天终于过了啊!!!

几个注意事项,首先,

在后面指数为正数的情况下,需要考虑到前面可能是多0的,比如+0.01E+03,前面0要去掉

还有就是在指数补完数量正好的情况下,这时候要把末尾小数点去掉,比如+1.23E+02,不判定的话就是123.

而在指数为负的情况下还要考虑补0

注意在提交的时候去掉自己写的printf

#include<stdio.h>
#include<string.h>
int main()
{
    char str[100000];
    while(scanf("%s",str)!=EOF)
    {
        int e,symbol1,symbol2;
        int len=strlen(str);
        if(str[0]=='+')
            symbol1=1;
        else
            symbol1=2;
        for(int i=2;i<=len-1;i++)
        {
            if(str[i]=='E')
            {
                e=i;
                break;
            }
        }
        if(str[e+1]=='+')
            symbol2=1;
        else
            symbol2=2;
        int up=e+2;
        while(str[up]=='0')
            up++;
        int count=1;
        int ans=0;
        int temp[10005];
        int tempnum=0;
        while(up<=len-1)
        {
            temp[tempnum++]=str[up]-'0';
            up++;
        }
        for(int i=tempnum-1;i>=0;i--)
        {
            ans+=count*temp[i];
            count=count*10;
        }
        //printf("symbol1:%d,e:%d,symbol2:%d,ans:%d\n",symbol1,e,symbol2,ans);
        if(symbol2==1)
        {
            int zero=1;
            if((ans+3)<e)
            {
                for(int i=2;i<=1+ans;i++)
                    str[i]=str[i+1];
                /*for(int i=e-1;i>ans+2;i--)
                    str[i+1]=str[i];*/
                str[ans+2]='.';
                if(str[0]=='-')
                    printf("-");
                while(str[zero]=='0')
                    zero++;
                if(str[zero]=='.')
                    zero--;
                for(int i=zero;i<e;i++)
                printf("%c",str[i]);
                printf("\n");
            }
            else if(ans+3==e)
            {
                for(int i=2;i<=1+ans;i++)
                    str[i]=str[i+1];
                //str[ans+2]='.';
                if(str[0]=='-')
                    printf("-");
                while(str[zero]=='0')
                    zero++;
                if(str[zero]=='.')
                    zero--;
                //printf("zero:%d\n",zero);
                for(int i=zero;i<e-1;i++)
                printf("%c",str[i]);
                printf("\n");
            }
            else
            {
                for(int i=2;i<=e-2;i++)
                    str[i]=str[i+1];
                for(int i=e-1;i<=ans+1;i++)
                    str[i]='0';
                if(str[0]=='-')
                    printf("-");
                while(str[zero]=='0')
                    zero++;
                if(str[zero]=='.')
                    zero--;
                for(int i=zero;i<=ans+1;i++)
                    printf("%c",str[i]);
                printf("\n");
            }
        }
        else
        {
            for(int i=e-1+ans;i>=ans+3;i--)
                str[i]=str[i-ans];
            str[ans+2]=str[1];
            str[1]='0';
            str[2]='.';
            for(int i=1;i<=ans-1;i++)
                str[2+i]='0';
            if(str[0]=='-')
                printf("-");
            for(int i=1;i<=e-1+ans;i++)
                printf("%c",str[i]);
            printf("\n");
        }
    }
    return 0;
}
View Code

猜你喜欢

转载自www.cnblogs.com/tingxilin/p/11469539.html