과학 계수 법
3242 단어 PAT
현재 과학 계수 법의 형식 으로 실수 A 를 드 립 니 다. 프로그램 을 작성 하여 일반 숫자 표시 법 에 따라 A 를 출력 하고 모든 유효 위 치 를 유지 하도록 하 십시오.
입력 형식:
각 입력 에는 과학 계수 법 으로 표 시 된 실수 A 를 포함 하 는 테스트 용례 가 1 개 씩 포함 되 어 있다.이 숫자의 저장 길 이 는 9999 바이트 를 초과 하지 않 고 지수의 절대 치 는 9999 를 초과 하지 않 는 다.
출력 형식:
모든 테스트 용례 에 대해 한 줄 에서 일반 숫자 표시 법 에 따라 A 를 출력 하고 모든 유효 위 치 를 유지 하 며 끝의 0 을 포함 합 니 다.
입력 샘플 1:
+1.23400E-03
출력 예시 1:
0.00123400
입력 샘플 2:
-1.2E+10
출력 예시 2:
-12000000000
알고리즘:
다음 코드 는 VS 2015 에서 성공 적 으로 실행 되 며, scanf 를 수정 할 수 있 습 니 다.s 는 PAT 에서 실행 할 수 있 습 니 다.
#include
#include
#include
#include
#define MAX 10000
int main(void) {
char originString[MAX];
int i, j, k, precision = 0, exponent = 0;
char p_sign, e_sign;
char* p;
scanf_s("%s", originString, MAX);
for (i = 0; toupper(originString[i]) != 'E'; i++) {
if (i == 0) {
p_sign = originString[i];
}
else if (isdigit(originString[i])) {
precision++;
}
}
while (i < (signed)strlen(originString)) {
if (originString[i] == '+' || originString[i] == '-') {
e_sign = originString[i];
}
else if (isdigit(originString[i])) {
exponent = exponent * 10 + originString[i] - '0';
}
i++;
}
p = (char*)malloc(sizeof(char)*(precision + exponent + 3));
if (e_sign == '-') {
if (exponent == 0) {
i = 0;
j = 0;
if (p_sign == '-') {
p[i++] = '-';
}
for (; toupper(originString[j]) != 'E'; j++) {
if (isdigit(originString[j]) || originString[j] == '.') {
p[i++] = originString[j];
}
}
p[i] = '\0';
}
else {
i = 0;
if (p_sign == '-') {
p[i++] = '-';
}
p[i++] = '0';
p[i++] = '.';
for (j = 0; j < exponent - 1; j++) {
p[i++] = '0';
}
for (j = 1; toupper(originString[j]) != 'E'; j++) {
if (originString[j] != '.') {
p[i++] = originString[j];
}
}
p[i] = '\0';
}
}
else {
if (precision - 1 <= exponent) {
i = 0;
if (p_sign == '-') {
p[i++] = '-';
}
for (j = 0; toupper(originString[j]) != 'E'; j++) {
if (isdigit(originString[j])) {
p[i++] = originString[j];
}
}
for (j = 0; j < exponent - precision + 1; j++) {
p[i++] = '0';
}
p[i] = '\0';
}
else {
i = 0;
k = 0;
if (p_sign == '-') {
p[i++] = '-';
}
for (j = 0; toupper(originString[j]) != 'E'; j++) {
if (isdigit(originString[j])&&k!=(1+exponent)) {
p[i++] = originString[j];
k++;
}
else if (k == (1 + exponent)) {
p[i++] = '.';
k++;
j--;
}
}
p[i] = '\0';
}
}
printf("%s", p);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.