PAT 1024 과학 계수 법의 코드 구현 및 오류 분석 (C 언어)

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

출력 예시 1:
0.00123400

입력 샘플 2:
-1.2E+10

출력 예시 2:
-12000000000

실현 사고: 문자 배열 로 데 이 터 를 저장 하고 관건 적 인 위 치 를 분류 분석 합 니 다.
1. 충분 한 긴 문자 배열 을 정의 하고 입력 데 이 터 를 저장 하 며 지수 크기 를 계산한다.
2. 첫 번 째 마이너스 번 호 는 그대로 출력 하고 나머지 구분 지 수 는 마이너스 이 며 0 또는 양수 두 가지 상황 으로 분류 출력 한다.
코드 는 다음 과 같 습 니 다:
#include

int main()
{
  char a[10002]={0};
  fgets(a,10002,stdin);//             
  int iBegin=0,iEnd=0;//        ,     
  for(int i=0;i<20002;i++)
  {
    if(a[i]=='E')
    {
      iBegin=i+1;
    }
    if(a[i]=='
') { iEnd=i-1; break; } } int iE=0,iCnt=1,iWei=0; // iE for(int i=iEnd;i>iBegin;i--) { iE+=(a[i]-'0')*iCnt; iCnt*=10; } if(a[0]=='-') { printf("-"); } // if(a[iBegin]=='-'&&iE!=0) { // 0 printf("0."); for(int j=0;j

오류 분석:
테스트 포인트 2 와 3 은 처음부터 끝까지 통과 하지 못 한 후에 자세히 검 사 를 한 결과 지수 가 정시 에 소수점 출력 을 판단 하 는 데 오류 가 존재 한 다 는 것 을 발견 했다. 즉, 지수 가 앞의 작은 수 를 정수 로 바 꿀 때 마지막 숫자 후에 소수점 을 출력 하 는 문제 에 제한 조건 인 iWei 를 더 할 수 있다.

좋은 웹페이지 즐겨찾기