zoukankan      html  css  js  c++  java
  • 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]='';
        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
  • 相关阅读:
    sersync+rsync原理及部署
    rsync同步
    zabbix 3.2.2 agent端(源码包)安装部署
    zabbix配置
    Netbackup media server部署报错
    Oracle_rac命令
    Linux系统克隆为iso镜像盘(类似win gost)
    Nebackup清除磁带数据重新使用
    V7000初始化
    【数据案例】服务器崩溃后的数据恢复方法
  • 原文地址:https://www.cnblogs.com/chenxiwenruo/p/6390670.html
Copyright © 2011-2022 走看看