PAT 을 등 1024 과학 기수법 C 언어

1024. 과학 계수 법 (20)
과학 계수 법 은 과학자 들 이 크 거나 작은 숫자 를 나타 내 는 편리 한 방법 으로 정규 표현 식 [+ -] [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. 입력 에서 E 를 찾 아 다음 지 수 를 절취
3. 지수 가 양수 인지 음수 인지 판단 한다.
     (1) 지수 가 음수 라면 지수 크기 에 따라 밑 에 있 는 개수 의 0 을 출력 하고 0 을 출력 한 후에 밑 에 있 는 소수점 을 뛰 어 넘 는 것 을 기억 합 니 다.하면, 만약, 만약...직접 출력
     (2) 지수 가 양수 라면 지수 가 밑 의 소수점 뒤의 자릿수 보다 작 으 면 소수점 을 오른쪽으로 이동 시 킨 다음 에 나머지 밑 의 수 를 출력 한다.지수 가 밑 에서 소수점 뒤의 자릿수 보다 크 면
               출력 이 끝 난 후 남 은 0 을 출력 합 니 다.지수 가 + 0 이면 직접 출력 베이스
시작 변수
1. num [10000] 문자열 받 기
2.e_mark, 입력 문자열 의 E 위 치 를 기록 하여 지수 와 밑 수 를 구분 합 니 다.
3.index_flag, 지수 기록 에 사용 되 는 기호 위치
4.index_ch, 지수 문자열 기록 에 사용
5. index, index 기록 에 사용ch 변환 지수의 정수 형식
코드
#include "stdio.h"
#include "math.h"
#include "string.h"
int main()
{
	char num[10000];
	scanf("%s",num);
	int i;
	
	//   ,      ; 
	if(num[0] == '-')
	{
		printf("-");
	}
	
	//  E   ,         
	int e_mark;
	for(i = 1; i < strlen(num); i++)
	{
		if(num[i] == 'E')
		{
			e_mark = i;
			break;
		}		
	}//      ,    E    
	
	i++;//             
	
	//        
	char index_flag = num[i];
	
	//        
	char index_ch[5];//     4 ,      \0 
	int j = 0;
	for(i = i + 1; i < strlen(num); i++)//    i+1,  i            
	{
		index_ch[j] = num[i];
		j++;
	}
	
	//              
	int index = 0;
	//      ,        ,     1234, 1    10 (4-1)   
	int index_right = strlen(index_ch) - 1;
	for(i = 0; i < strlen(index_ch); i++)
	{
		index += (index_ch[i] - '0') * pow(10,index_right);
		index_right--;
	}//          
	
	if(index_flag == '-')//     -    
	{
		if(index != 0)
		{
			printf("0.");//      0,    ‘0.’ 
			for(i = 0; i < index - 1; i++)//      “0.” ,        
			{
				printf("0");
			} 
			for(i = 1; i < e_mark; i++)//  num    , 1  ,0        ,          
			{
				if(i == 2)//            
				{
					continue;
				}
				printf("%c",num[i]);
			}
		}
		else if(index == 0)//   0 
		{
			for(i = 1; i < e_mark; i++)//  num     
			{
				printf("%c",num[i]);
			}
		}

	}
	else if(index_flag == '+')
	{
		if(index != 0)
		{
			if(index < e_mark - 3)//              
			{
				for(i = 1; i < e_mark ; i++) 
				{
					if(i == 2)//      
					{
						continue;
					}
					else if(i == 2 + index)//    0         
					{
						printf("%c",num[i]);
						printf("."); 
					}
					else 
					{
						printf("%c",num[i]);
					}
				
				}
			}
			else if(index == e_mark - 3) //             
			{
				for(i = 1; i < e_mark ; i++)
				{
					if(i == 2)//      
					{
						continue;
					}
					else 
					{
						printf("%c",num[i]);
					}
				
				}
			}
			else if(index > e_mark - 3)//             
			{
				for(i = 1; i < e_mark; i++)
				{
					if(i == 2)//        
					{
						continue;
					}
					else 
					{
						printf("%c",num[i]);
					}
				}
				//                ,           0 
				for(i = 0; i < index - (e_mark - 3); i++)
				{
					printf("0");
				}
			}
		}
		else if(index == 0)//   0 
		{
			for(i = 1; i < e_mark; i++)//  num     
			{
				printf("%c",num[i]);
			}
		}
		
	}
	
	
	return 0;
}

좋은 웹페이지 즐겨찾기