PAT (Basic Level) Practise (중국어) 1024. 과학 계수 법 (20)

5789 단어 C 언어
  • 과학 계수 법 (20)
  • 시간 제한 100 ms 메모리 제한 65536 kB 코드 길이 제한 8000 B 판정 프로그램 Standard 저자 HOU, Qiming 과학 계수 법 은 과학자 들 이 크 거나 작은 숫자 를 나타 내 는 편리 한 방법 으로 정규 표현 식 [+ -] [1 - 9] 을 만족시킨다. [0 - 9] + E [+ -] [0 - 9] +, 즉 숫자의 정수 부분 은 1 자리, 소수 부분 은 최소 1 자리,이 숫자 와 지수 부분의 양음 호 는 양수 에 대해 서도 반드시 명확 하 게 제시 해 야 한다.
    현재 과학 계수 법의 형식 으로 실수 A 를 드 립 니 다. 프로그램 을 작성 하여 일반 숫자 표시 법 에 따라 A 를 출력 하고 모든 유효 위 치 를 유지 하도록 하 십시오.
    입력 형식:
    각 입력 에는 과학 계수 법 으로 표 시 된 실수 A 를 포함 하 는 테스트 용례 가 1 개 씩 포함 되 어 있다.이 숫자의 저장 길 이 는 9999 바이트 를 초과 하지 않 고 지수의 절대 치 는 9999 를 초과 하지 않 는 다.
    출력 형식:
    모든 테스트 용례 에 대해 한 줄 에서 일반 숫자 표시 법 에 따라 A 를 출력 하고 모든 유효 위 치 를 유지 하 며 끝의 0 을 포함 합 니 다.
    입력 샘플 1: + 1.23400E - 03 출력 샘플 1: 0.001 23400 입력 샘플 2: - 1.2E + 10 출력 샘플 2: - 1200000000
    사고방식: 밑 수 와 지 수 를 두 부분 으로 나 눈 다음 에 지수의 계산 방법 에 따라 계산한다.
    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        char str[10000] = {0};
        scanf("%s", str);
    
        int len = strlen(str);
        int pos = 0, exp = 0;
        int i = 0;
        for(i = 0; *(str + i) != 'E'; i++); //  'E'   
        pos = i;
        if(*str == '-')
            printf("-");
        for(i = pos + 2; i < len; i++)
        {
            exp = exp * 10 + (*(str + i) - '0'); //      
        }
        if(exp == 0)
        {
            for(i = 1; i < pos; i++)
                printf("%c", *(str + i));
        }
        else if(*(str + pos + 1) == '-') //      
        {
            printf("0.");
            for(i = 0; i < exp - 1; i++)
            {
                printf("0");
            }
            for(i = 1; i < pos; i++)
            {
                if(*(str + i) != '.')
                    printf("%c", *(str + i));
            }
        }
        else if(*(str + pos + 1) == '+') //    
        {
            for(i = 1; i < pos; i++)
            {
                if(*(str + i) != '.')
                    printf("%c", *(str + i));
                if(i == (exp + 2) && (exp + 2) < (pos -1))
                    printf(".");
    
            }
            for(i = 0; i< exp + 2 - (pos - 1); i++)
            {
                printf("0");
            }
        }
        printf("
    "
    ); return 0; }

    좋은 웹페이지 즐겨찾기