PAT 1024. 科学计数法

来源:互联网 发布:招商银行炒股软件 编辑:程序博客网 时间:2024/06/06 07:30

题目:http://pat.zju.edu.cn/contests/pat-b-practise/1024

题解:

将输入的科学计数法数字转换为正常的数字。

分子分母至少有1位。

按指数的正负分情况处理即可。

代码:

#include<cstdio>#include<cstring>#include<cmath>#include<string>#include<vector>#include<map>#include<set>#include<algorithm>using namespace std;int charToInt(char *x){    int len=strlen(x);    int summ=0;    for(int i=0; i<len; ++i)    {        summ*=10;        summ+=(x[i]-'0');    }    return summ;}int main(){    char ch[210000];    char a[200000];//底数    char b[10000];//指数    char flagA,flagB;//符号    int lenA=0,lenB=0,lenC,intB;    int idx=-1;//点的位置    scanf("%s",ch);    flagA=ch[0];    lenC=strlen(ch);    bool flag=true;    for(int i=1; i<lenC; ++i)    {        if(ch[i]=='.')        {            idx=i-1;        }        else if(ch[i]=='E')        {            flag=false;        }        else if(ch[i]=='+'||ch[i]=='-')        {            flagB=ch[i];        }        else if(flag)        {            a[lenA++]=ch[i];        }        else        {            b[lenB++]=ch[i];        }    }    intB=charToInt(b);    if(flagA=='-')        printf("-");    //printf("%d %d %d %d\n",lenA,lenB,idx,intB);    if(flagB=='+')    {        flag=false;        idx+=intB;        for(int i=1; i<=lenA; ++i)        {            if(i<idx)            {                if(a[i-1]=='0'&&flag==false)                    continue;                else                {                    printf("%c",a[i-1]);                    flag=true;                }            }            else if(i==idx)            {                if(i==lenA)                    printf("%c",a[i-1]);                else                    printf("%c.",a[i-1]);            }            else                printf("%c",a[i-1]);        }        for(int i=0; i<idx-lenA; ++i)            printf("0");    }    else    {        flag=false;        idx-=intB;        if(idx<=0)        {            printf("0.");            for(int i=0; i<-idx; ++i)                printf("0");            for(int i=0; i<lenA; ++i)                printf("%c",a[i]);        }        else        {            for(int i=1; i<=lenA; ++i)            {                if(i<idx)                {                    if(a[i-1]=='0'&&flag==false)                        continue;                    else                    {                        printf("%c",a[i-1]);                        flag=true;                    }                }                else if(i==idx)                {                    printf("%c.",a[i-1]);                }                else                    printf("%c",a[i-1]);            }        }    }    return 0;}

来源:http://blog.csdn.net/acm_ted/article/details/20383881

0 0
原创粉丝点击