PAT 1024 과학 계수 법 C 언어 실현
3112 단어 PAT
.
[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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PAT A 1049. Counting Ones (30)제목 The task is simple: given any positive integer N, you are supposed to count the total number of 1's in the decimal fo...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.