PAT - B 1024. 과학 계수 법

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

출력 예시 1:
0.00123400

입력 샘플 2:
-1.2E+10

출력 예시 2:
-12000000000

사고 분석:
먼저 제목 에 따라 입력 데 이 터 를 분해 하고 기호 (head) 를 얻 으 며 소수점 의 유효 숫자 (char a []) 와 지수 (ex) 를 제외 합 니 다.지수 크기 에 따라 분류 처리 하고 ex > = 0 시 소수점 에서 오른쪽으로 ex 위 치 를 이동 하 며 유효 숫자 길 이 를 초과 하면 0 을 보충 해 야 합 니 다.ex < 0 시, 소수점 이 왼쪽으로 ex 자 리 를 이동 하고 소수점 왼쪽 에 0 이 있 으 며, 나머지 초과 부분 은 똑 같이 0 을 보충 합 니 다.
코드:
#include <stdio.h>

int main()
{
    char head, a[10001] = {0};
    int ex = 0;

    scanf("%c%c.%[0-9]E%d", &head, &a[0], a+1, &ex); //       
    if (head == '-') printf("-"); //      
    if (ex >= 0)
        for (int i = 0; i < ex+1 || a[i] != 0; i++) { //                  ,               
            if (i == ex+1) printf("."); //        ,     
            printf("%c", a[i]==0 ? '0' : a[i]); //           0
        }
    else {
        printf("0."); 
        for (int i = 1; i < (-ex); i++) printf("0");
        printf("%s", a);
    }

    printf("
"
); return 0; }

여기 눌 러 서 시험 문제 홈 페이지 에 들 어가 세 요.

좋은 웹페이지 즐겨찾기