2016计蒜之道初赛第三场----百度的科学计算器【模拟】

来源:互联网 发布:淘宝店怎么弄淘客 编辑:程序博客网 时间:2024/05/21 00:55

百度有一款非常方便的在线应用——科学计算器。这个计算器可以接受科学记数法表示的数作为输入。

在科学记数法中,一个数被写成一个实数 aaa 与一个 101010nnn 次幂的积:

a∗10na * 10 ^ na10n

其中 nnn 是一个整数,aaa 是一个实数且 1≤∣a∣<101 \leq |a| < 101a<10。在计算器的输入中,使用eee 来表示 101010 的幂。比如

1.5e5的值为 1.5∗1051.5 * 10^51.5105

3.2e-6的值为 3.2∗10−63.2 * 10^{-6}3.2106

科学计算器在进行计算之前,要先对用户输入的数进行简化。简化的过程是将科学记数法表示的数转换成与之等价的长度 最短 的科学记数法表示。

输入格式

输入只有一行,输入一个长度不超过 100100100 的科学记数法表示的浮点数。保证输入的合法性。

输出格式

输出一行,表示简化后的科学记数法表示的浮点数。

样例输入1

02.0e-5

样例输出1

2e-5

样例输入2

+1.101e+00

样例输出2

1.101e0

提示信息

请确保输出的结果也依然是合法的科学记数法表示。



思路:e的两端是两个需要去掉前导0和后置0的两个数,我分成了两种情况考虑,一种是带小数点的浮点数处理,也分成两部分去做,一个是小数点前的去前导0,一个是去小数点后的后置0。然后将两个串都处理了,输出。另一种是没有小数点的数处理,这个不需要处理后置0的问题,只需要处理前导0即可。


注意处理符号。


AC代码:

#include<stdio.h>#include<string.h>using namespace std;char a[5000];char ans[5000];char ans2[5000];int main(){    while(~scanf("%s",a))    {        int n=strlen(a);        int mid;        for(int i=0;i<n;i++)        {            if(a[i]=='e')            {                mid=i;break;            }        }        int biaoji=-1;        for(int i=0;i<mid;i++)        {            if(a[i]=='.')            {                biaoji=i;            }        }        if(biaoji==-1)        {            int flag=0;            int ffff=0;            for(int i=0;i<mid;i++)            {                if(a[i]=='-')                {                    flag=1;                    continue;                }                if(ffff==0&&a[i]=='0')continue;                else                {                    ffff=1;                    if(a[i]=='+')                    {                        ffff=0;                        continue;                    }                    if(flag==1)                    {                        printf("-");                        flag=0;                    }                    printf("%c",a[i]);                }            }        }        else        {            int ffff=0;            int flag=0;            for(int i=0;i<biaoji;i++)            {                if(a[i]=='-')                {                    flag=1;                    continue;                }                if(ffff==0&&a[i]=='0'&&a[i+1]!='.')continue;                else                {                    ffff=1;                    if(a[i]=='+')                    {                        ffff=0;                        continue;                    }                    if(flag==1)                    {                        flag=0;                        printf("-");                    }                    printf("%c",a[i]);                }            }            ffff=0;            char ans[500];            int cont=0;            for(int i=mid-1;i>biaoji;i--)            {                if(ffff==0&&a[i]=='0')continue;                else                {                    ffff=1;                    if(a[i]=='+')                    {                        ffff=0;                        continue;                    }                    ans[cont++]=a[i];                }            }            if(ffff==1)            printf(".");            for(int i=cont-1;i>=0;i--)            {                if(ans[i]=='+')continue;                printf("%c",ans[i]);            }        }        printf("e");        biaoji=-1;        ///////////////////after e        for(int i=mid;i<n;i++)        {            if(a[i]=='.')biaoji=i;        }        if(biaoji==-1)        {            int flag=0;            int ffff=0;            for(int i=mid+1;i<n;i++)            {                if(a[i]=='-')                {                    flag=1;                    continue;                }                if(a[i]=='0'&&ffff==0)continue;                else                {                    ffff=1;                    if(a[i]=='+')                    {                        ffff=0;                        continue;                    }                    if(flag==1)                    {                        printf("-");                        flag=1;                    }                    printf("%c",a[i]);                }            }            if(ffff==0)            {                printf("0");            }            printf("\n");        }        else        {            int gg1=0;            int fff=0;            int flag=0;            for(int i=mid+1;i<biaoji;i++)            {                if(a[i]=='-')                {                    flag=1;continue;                }                if(a[i]=='+')continue;                if(fff==0&&a[i]=='0'&&a[i+1]!='.')continue;                else                {                    if(flag==1)                    {                        printf("-");                        flag=0;                    }                    fff=1;                    gg1=1;                    printf("%c",a[i]);                }            }            fff=0;            char ans[500];            int cont=0;            for(int i=n-1;i>biaoji;i--)            {                if(fff==0&&a[i]=='0')continue;                else                {                    fff=1;                    if(a[i]=='+')                    {                        fff=0;                        continue;                    }                    ans[cont++]=a[i];                }            }            int gg=0;            if(fff==1)            {                printf(".");                for(int i=cont-1;i>=0;i--)                {                    if(ans[i]=='+')continue;                    gg=1;                    printf("%c",ans[i]);                }            }            if(gg==0&&gg1==0)            {                printf("0");            }            printf("\n");        }    }}

















0 0
原创粉丝点击