PAT 을 급 - 1024. 과학 계수 법 (20) - native
현재 과학 계수 법의 형식 으로 실수 A 를 드 립 니 다. 프로그램 을 작성 하여 일반 숫자 표시 법 에 따라 A 를 출력 하고 모든 유효 위 치 를 유지 하도록 하 십시오.
입력 형식:
각 입력 에는 과학 계수 법 으로 표 시 된 실수 A 를 포함 하 는 테스트 용례 가 1 개 씩 포함 되 어 있다.이 숫자의 저장 길 이 는 9999 바이트 를 초과 하지 않 고 지수의 절대 치 는 9999 를 초과 하지 않 는 다.
출력 형식:
모든 테스트 용례 에 대해 한 줄 에서 일반 숫자 표시 법 에 따라 A 를 출력 하고 모든 유효 위 치 를 유지 하 며 끝의 0 을 포함 합 니 다.
입력 샘플 1:
+1.23400E-03
출력 예시 1:
0.00123400
입력 샘플 2:
-1.2E+10
출력 예시 2:
-12000000000
사고방식: 문자열 을 입력 하고 문자열 을 해석 하여 E 뒤의 모든 문자 가 대표 하 는 숫자 를 구하 고 + - 각각 두 개의 변수 로 behindE_plus,behind_E_minus 저장, 대 - 의 경우 원 문자열 앞 에 0 을 추가 하고 behind 를 추가 합 니 다.E_minus 개, 배열 로 이 0 을 저장 합 니 다. 원 문자열 에 E 이전의 순 숫자 를 더 하고 첫 번 째 요소 뒤에 소수점 (이 경우 첫 번 째 요소 뒤에 소수점 이 있어 야 합 니 다) 을 추가 합 니 다. + 의 경우 소수점 이후 E 이전의 요소 개수 count 와 behind 를 고려 해 야 합 니 다.E_plus 의 관계, count < = behindE_plus 는 소수점 을 출력 하지 않 고 원 문자열 의 순 숫자 를 출력 한 후 behind 를 추가 합 니 다.E_plus - count 개 0, count > behindE_plus, 출력 원 문자열 behindE_plus + 1 문자 뒤에 소수점 을 추가 하고 나머지 요 소 를 출력 합 니 다. 위의 모든 출력 은 원래 문자열 의 시작 에 - 있 는 지 여 부 를 판단 하고 있 으 면 출력 할 때 추가 하면 됩 니 다.
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string a;
char b[100000];
cin>>a;
int j=0;
int behind_E_plus=0; // E+
int behind_E_minus=0; // E-
int e=0;
for(int i=0;i<a.length();i++) // E+,E-
{
if(e==1)
{
behind_E_plus=behind_E_plus*10+(a[i]-'0');
}
if(e==2)
{
behind_E_minus=behind_E_minus*10+(a[i]-'0');
}
if(a[i-1]=='E'&&a[i]=='+') e=1;
if(a[i-1]=='E'&&a[i]=='-') e=2;
}
if(behind_E_minus!=0) // E-
{
for(int i=0;i<behind_E_minus;i++) // b behind_E_minus 0
{
b[j++]='0';
}
for(int i=0;i<a.length();i++) // E
{
if(a[i]=='E') break;
if(a[i]>='0'&&a[i]<='9')
b[j++]=a[i];
}
for(int i=1;i<j;i++) // , -
{
if(i==1&&a[0]=='-')
cout<<"-";
if(i==1)
cout<<b[0]<<"."; //
cout<<b[i];
}
}
else // E+
{
int count; //
bool begin=false; //
for(int i=0;i<a.length();i++) // E b
{
if(a[i]=='E') break;
if(begin) count++;
if(a[i]=='.') begin=true;
if(a[i]>='0'&&a[i]<='9')
{
b[j++]=a[i];
}
} // 0, behind_E_plus<=count
for(int i=0;i<behind_E_plus-count;i++)
{
b[j++]='0';
}
if(behind_E_plus-count<0) // behind_E_plus<count, behind_E_plus+1
{ // , ,
if(a[0]=='-')
cout<<"-";
int k=0;
for(int i=0;i<(behind_E_plus)+1;i++)
{
cout<<b[i];
k=i;
}
cout<<".";
for(int i=k+1;i<j;i++)
{
cout<<b[i];
}
}
else // behind_E_plus>=count
{
for(int i=0;i<j;i++)
{
if(i==0&&a[0]=='-')
cout<<"-";
cout<<b[i];
}
}
}
return 0;
}
제목 링크:
https://www.patest.cn/contests/pat-b-practise/1024
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PAT 01-2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.