PAT甲题题解-1073. Scientific Notation (20)-字符串处理

Posted 辰曦~文若

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT甲题题解-1073. Scientific Notation (20)-字符串处理相关的知识,希望对你有一定的参考价值。

题意:给出科学计数法的格式的数字A,要求输出普通数字表示法,所有有效位都被保留,包括末尾的0。

分两种情况,一种E+,一种E-。具体情况具体分析╮(╯_╰)╭

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <cmath>
#define POSITIVE 1
#define NEGATIVE 2
using namespace std;
/*
将科学计数法表示的数转换成传统的形式输出
*/
const int maxn=80000;
char str[maxn];
char expval[maxn];

void printNum(char *num,int idxE,int fraclen,int e,int mark){
    //指数为正
    if(mark==POSITIVE){
        bool flag=false;
        if(num[0]!=\'0\'){
            flag=true;
            printf("%c",num[0]);
        }
        num+=2;
        int minlen=min(fraclen,e);
        for(int i=0;i<minlen;i++){
            //前面的0直接忽略
            if(num[i]!=\'0\'){
                flag=true;
            }
            if(flag){
                printf("%c",num[i]);
            }
        }
        if(e>=fraclen){
            for(int i=0;i<e-fraclen;i++)
                printf("0");
        }
        else{
            printf(".");
            for(int i=0;i<fraclen-e;i++)
                printf("%c",num[minlen+i]);
        }
    }
    //指数为负
    else{
        printf("0.");
        for(int i=0;i<e-1;i++){
            printf("0");
        }
        for(int i=0;num[i]!=\'E\';i++){
            if(num[i]!=\'.\')
                printf("%c",num[i]);
        }
    }
}
int main()
{
    scanf("%s",str);
    int len=strlen(str);
    int idxE=0;
    int fracLen;
    for(int i=0;i<len;i++){
        if(str[i]==\'E\'){
            idxE=i; //E的索引
            break;
        }
    }
    fracLen=idxE-3;//小数部分长度
    int explen=0;
    for(int i=idxE+2;i<len;i++){
        expval[explen++]=str[i];
    }
    expval[explen]=\'\\0\';
    int e=atoi(expval);
    if(str[idxE+1]==\'+\'){
        if(str[0]==\'-\')
            printf("-");
        printNum(str+1,idxE,fracLen,e,POSITIVE);

    }
    else{
        if(str[0]==\'-\')
            printf("-");
        printNum(str+1,idxE,fracLen,e,NEGATIVE);
    }
    return 0;
}
View Code

 

以上是关于PAT甲题题解-1073. Scientific Notation (20)-字符串处理的主要内容,如果未能解决你的问题,请参考以下文章

PAT甲级——1073 Scientific Notation (20分)

PAT(A) 1073. Scientific Notation (20)

[PAT] 1073 Scientific Notation (20 分)Java

PAT 1073 Scientific Notation[字符串处理][科学记数法]

PAT 甲级 1073 Scientific Notation (20 分) (根据科学计数法写出数)

PAT (Advanced Level) 1073. Scientific Notation (20)