PAT B 급 1024. 과학 계수 법 (20)

1980 단어
과학 계수 법 은 과학자 들 이 크 거나 작은 숫자 를 나타 내 는 편리 한 방법 으로 정규 표현 식 [+ -] [1 - 9] 을 만족 시 키 는 것 이다.
현재 과학 계수 법의 형식 으로 실수 A 를 드 립 니 다. 프로그램 을 작성 하여 일반 숫자 표시 법 에 따라 A 를 출력 하고 모든 유효 위 치 를 유지 하도록 하 십시오.
입력 형식:
각 입력 에는 과학 계수 법 으로 표 시 된 실수 A 를 포함 하 는 테스트 용례 가 1 개 씩 포함 되 어 있다.이 숫자의 저장 길 이 는 9999 바이트 를 초과 하지 않 고 지수의 절대 치 는 9999 를 초과 하지 않 는 다.
출력 형식:
모든 테스트 용례 에 대해 한 줄 에서 일반 숫자 표시 법 에 따라 A 를 출력 하고 모든 유효 위 치 를 유지 하 며 끝의 0 을 포함 합 니 다.
입력 샘플 1:
+1.23400E-03

출력 예시 1:
0.00123400

입력 샘플 2:
-1.2E+10

출력 예시 2:
-12000000000

제출 코드
문제 풀이 코드
#include
#include
int main() {
    char str[10010];
    gets(str);
    int len = strlen(str);
    if(str[0] == '-') printf("-");//     ,  -

    int pos =0; //pos      E   
    while(str[pos] != 'E') {
        pos++;
    }

    int exp = 0; //    (      )
    for(int i = pos + 2; i < len; i++) {
        exp = exp * 10 + (str[i] - '0');
    }

    if(exp == 0) { //     0   
        for(int i = 1; i < pos; i++) {
            printf("%c", str[i]);
        }
    }

    if(str[pos +1] == '-') {  //      
        printf("0.");
        for(int i = 0; i < exp - 1; i++) { //  exp -1 0
            printf("0");
        }
        printf("%c", str[1]); //            
        for (int i = 3; i < pos; i++) {
            printf("%c", str[i]);
        }
    } else {
        for(int i = 1; i < pos ; i++) {
            if(str[i] == '.') continue;//        
            printf("%c", str[i]);//      
            if(i == exp + 2 && pos - 3 != exp) { //       exp + 2 
                printf(".");
            }

        }
        for(int i = 0; i < exp - (pos - 3); i++) {
            printf("0");
        }
    }

    return 0;
}

좋은 웹페이지 즐겨찾기