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;
}

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

原文地址:https://www.cnblogs.com/coderJiebao/p/PAT1024.html