PAT 1024. 科学计数法

题目: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

你可能感兴趣的:(PAT 1024. 科学计数法)