• 1024. 科学计数法(两点未通过)


     题目截图:

    思路:

      字符串处理。根据指数正负做不同处理。

     

    代码:

    /*
        1024. 科学计数法
    */
    
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define maxn 10010
    char str[maxn];                    // 存储输入值 
    
    int main() {
        // a为整数部分
        // b为E位置,c为指数 
        int i, a, b, c=0, flag=1;     
        scanf("%s", str);
        a = str[1]-'0';
        // 查找 E 所在位置 
        for(i=3; i<strlen(str); ++i) {
            if(str[i]=='E') {
                b = i;
                break;
            }
        }
        i++;
        // 求指数 
        if(str[i]=='+') {
            flag=1;
        }  else {
            flag = -1;
        }
        i++;
        for(; i<strlen(str); ++i) {
            c = c*10+(str[i]-'0');
        }
        c = flag*c;
        if(str[0]=='-') {
            printf("-"); 
        }
        if(c > 0) {                    // 若指数为正 
            printf("%d", a);
            int l = b-2;
            if(c>l) {                // 去掉小数点,在后面加 0 
                for(i=3; i<b; ++i) {
                    printf("%c", str[i]);
                }
                for(i=0;i<c-l+1; ++i) {
                    printf("0");
                }
            } else {                // 小数点向右移 c 位 
                for(i=0; i<c; ++i) {
                    printf("%c", str[3+i]);
                }
                printf(".");
                i+=3;
                for(; i<b; ++i) {
                    printf("%c", str[i]);
                } 
            }
        } else if(c < 0) {            // 若指数为负 
            int l = -c-1;
            printf("0.");            // 前面加 0. 
            for(i=0; i<l; ++i) {    // 小数点向左移 c 位 
                printf("0");
            }
            printf("%d", a);
            for(i=3; i<b; ++i) {
                printf("%c", str[i]);
            }
        } else {                    // 若指数为 0 
            for(i=1; i<b; ++i) {
                printf("%c", str[i]);
            }
        }
    
        return 0;
    }

    :此代码有两个点没过,至今没找到原因。

  • 相关阅读:
    OCP-1Z0-053-V12.02-285题
    OCP-1Z0-053-V12.02-281题
    今天博客抽风了,我也抽风了
    OCP-1Z0-053-V12.02-278题
    OCP-1Z0-053-V12.02-271题
    OCP-1Z0-053-V12.02-269题
    OCP-1Z0-053-V12.02-256题
    OCP-1Z0-053-V12.02-249题
    OCP-1Z0-053-V12.02-248题
    OCP-1Z0-053-V12.02-244题
  • 原文地址:https://www.cnblogs.com/coderJiebao/p/PAT1024.html
Copyright © 2020-2023  润新知