PAT 1024 과학 계수 법 C 언어 실현

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

출력 예시 1:
0.00123400

입력 샘플 2:
-1.2E+10

 
출력 예시 2:
-12000000000
#include
#include

int main()
{
	char ch[50000] = {};
	scanf("%s",ch);
	
	int count = 0;
	int len =strlen(ch);
	int move = 0;						//   
	int mark1 = 0;
	for(int i = len-1 ; i >= 0; i--)	//  E     	
	{
		if('+' == ch[i])
			mark1 = 1;
		if('-' != ch[i] && '+' != ch[i])
		{
			count++;
			if(1 == count)
				move += ch[i] - '0';
			else
			{	
				int n = 1;
				for(int j = 1 ; j < count ; j++)
				{
					n *= 10;
				}
				move += (ch[i]-'0') * n;
			}
		}
		else
			break;
	}	
	char ch1[50000] = {};	//     
	char ch2[50000] = {};	//    
	int n1 = 0,n2 = 0;
	for(int i = 1; i < len ; i++)	//   
	{
		ch2[n2++] = ch[i];
		if('.' != ch[i])
		{
			if('E' == ch[i])
			{
				ch2[n2-1] = '\0';
				ch1[n1] = '\0';
				break;
			}
			else
				ch1[n1++] = ch[i];
		}

	}
	int zero = 0;	// 0     0
	for(int i = 0 ; '\0' != ch1[i] ; i++)
	{
		if('0' != ch1[i])
			zero++;
	}
	if(0 == zero)
	{
		printf("0
"); return 0; } if('-' == ch[0]) printf("-"); char resu[50000] = {}; if(0 == move) // 0 { printf("%s",ch2); return 0; } else if(mark1) // { int l = strlen(ch1) - 1; if(move >= l) { int n = l+1; strcpy(resu,ch1); for(int i = 0 ; i < move - l ; i++) { resu[n++] = '0'; } resu[n] = '\0'; } else { for(int i = 0 ; move > 0 ; i++) { char temp = 0; if('.' == ch2[i]) { temp = ch2[i]; ch2[i] = ch2[i+1]; ch2[i+1] = temp; move--; } } strcpy(resu,ch2); } int n = 0; for(int i = 0 ; '\0' != resu[i] ; i++) { if('0' == resu[i]) { if('.' == resu[i+1] || '0' != resu[i]) break; else n++; } else break; } for(int i = n ; '\0' != resu[i] ; i++) printf("%c",resu[i]); } else // { int n = 2; resu[0] = '0'; resu[1] = '.'; for(int i = 1 ; i < move ; i++) { resu[n++] = '0'; } for(int i = 0 ; '\0' != ch1[i];i++) { resu[n++] = ch1[i]; } resu[n] = '\0'; printf("%s",resu); return 0; } return 0; }

좋은 웹페이지 즐겨찾기