프로 그래 밍 제목: PAT 1024. 과학 계수 법 (20)

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

출력 예시 1:
0.00123400

입력 샘플 2:
-1.2E+10

출력 예시 2:
-12000000000

       이 문 제 는 좀 서 툴 러 서 개인 적 으로 문자열 처 리 를 잘 하지 못 합 니 다.참고 코드 는 다음 과 같 습 니 다. 여기 서 몇 가 지 를 간략하게 제시 하고 string 작업 에 대한 익숙 함 을 주의 하 십시오. stringstream 에 대한 이해 (이 를 이용 하여 string 에서 int 로 의 전환 을 깨 웠 습 니 다).코드 논리 가 복잡 하지 않 으 니 보시 면 됩 니 다.
/*
http://pat.zju.edu.cn/contests/pat-b-practise/1024      
*/

#include<iostream>
#include<string>
#include<sstream>
using namespace std;

int stringToint(const string &S)//  stringstream  string int   
{
	stringstream ss;
	int result;
	ss << S;
	ss >> result;
	return result;
}
int main()
{
	string str,num;
	int exp;
	cin >> str;
	char sign = str[0];//   
	int LocE = str.find('E');//  E   
	num = str[1]; 
	num += str.substr(3,LocE - 3);//        
	exp = stringToint(str.substr(LocE+1));

	/////    
	if(sign == '-')
		cout<<"-";
	//       
	if(exp<0)//   0
	{
		cout<<"0.";
		for(int i = 0;i<-exp-1;i++)
			cout<<'0';
		cout<<num;
	}
	else if(exp>=num.length()-1)//   0,    
	{
		cout<<num;
		for(int i = 0;i<exp-num.length()+1;i++)
			cout<<'0';
	}
	else //      
	{
		cout<<num.substr(0,exp+1);
		cout<<".";
		cout<<num.substr(exp+1);
	}
	system("pause");
	return 0;
}

좋은 웹페이지 즐겨찾기