PAT B 급 1024. 과학 계수 법 (C 언어)

6545 단어 PAT B 급
1024. 과학 계수 법 (20)
제목: 과학 계수 법 은 과학자 들 이 매우 크 거나 작은 숫자 를 나타 내 는 편리 한 방법 으로 정규 표현 식 [+ -] [1 - 9] 을 만족 시 키 는 것 이다.현재 과학 계수 법의 형식 으로 실수 A 를 드 립 니 다. 프로그램 을 작성 하여 일반 숫자 표시 법 에 따라 A 를 출력 하고 모든 유효 위 치 를 유지 하도록 하 십시오.입력 형식: 각 입력 은 과학 계수 법 으로 표 시 된 실수 A 를 포함 합 니 다.이 숫자의 저장 길 이 는 9999 바이트 를 초과 하지 않 고 지수의 절대 치 는 9999 를 초과 하지 않 는 다.출력 형식: 모든 테스트 용례 에 대해 한 줄 에 일반 숫자 표시 법 에 따라 A 를 출력 하고 모든 유효 비트 가 보 존 됩 니 다. 끝의 0 을 포함 합 니 다.입력 샘플 1: + 1.23400E - 03 출력 샘플 1: 0.001 23400 입력 샘플 2: - 1.2E + 10 출력 샘플 2: - 1200000000
제목 분석: 제목 의 규정 수 치 는 최대 9999 개의 바이트 일 수 있 지만 지수 절대 치 는 9999 를 초과 하지 않 는 다.문 제 는 모든 정 도 를 유지 해 야 하기 때문에 '문자열' 로 처리 해 야 합 니 다.
사고: / * 문자열 을 몇 부분 으로 나 눕 니 다. 기호, 정수, 소수, 지수 기호, 지 수 는 각각 * if (기호 '-') 출력 '-' / 출력 기호 * if (지 수 는 0) 직접 출력 정수, 소수 * else if (지수 기호 '+) * {....................................................................*.....................................................................................................................................(지수 기호 '-') * {*..... 출력 '0' *... 출력 (지수 - 1) 개 0 *.... 출력 정수, 소수 문자열 *} * /
코드 는 다음 과 같 습 니 다:
#include
#define SIZE 100000
#define TEST1
int main(void)
{
        char sign;//  
        char integer;//  
        char frac[SIZE];//  
        char expSign;//    
        int  exp;//  
        char ch;

        sign = getchar();
        integer = getchar();
        getchar();//     
        int lenth = 0;
        while((ch = getchar())!='E')
        {       
                frac[lenth++] = ch;
        }
        expSign = getchar();
        scanf("%d",&exp);

        #ifndef TEST1
        printf("%c%c.%sE%c%d
"
,sign,integer,frac,expSign,exp); #endif if(sign == '-') printf("-"); if(!exp)// printf("%c.%s
"
,integer,frac); else if(expSign == '+') { if(exp>=lenth)// >= , , ‘0’ { printf("%c%s",integer,frac); for(int i = 0;i < exp - lenth ;i++) putchar('0'); putchar('
'
); } else { if(integer != '0') printf("%c",integer); for(int i = 0;iprintf("%c",frac[i]); if(i == exp-1) putchar('.'); } putchar('
'
); } } else//expSign == '-' { printf("0."); for(int i = 0; i < exp-1;i++) putchar('0'); printf("%c%s
"
,integer,frac); } return 0; }

소결 & & 군말:  이런 '논리 적 상감' 문 제 는 어렵 지 않 은 편 이다. 바로 '힘 든 일' 이다. 엄밀 해 야 한다. 그렇지 않 으 면 어떤 부분 에서 실 수 를 하기 쉽다. 그리고 논리 적 오류 이기 때문에 찾기 가 쉽 지 않 고 힘 들 것 이다. 그러나 나 는 다음 과 같은 절 차 를 따 르 면 이런 문 제 는 약간 '쉽다' 고 생각한다.... 1. 자신 이 무엇 을 하고 있 는 지 잊 지 마 세 요! 확실히 이런 문 제 는 가끔 자신 을 어 지 럽 히 기 쉽 습 니 다. 코드 를 두 드 리 면서 갑자기 자신 이 무엇 을 하고 있 는 지 잊 어 버 립 니 다......................................             (2) 주석 을 많이 써 서 자신 에 게 어디 까지 했 는 지 일 깨 워 준다. 2. '특수 상황' 을 먼저 처리한다. 이렇게 하면 한편 으로 는 특수 상황 을 무시 하기 쉽 지 않 고, 다른 한편 으로 는 다음 코드 를 적 게 처리 하 는 데 도 도움 을 줄 수 있다.(이 건 언제나 맞 는 것 같은 데...)

좋은 웹페이지 즐겨찾기