다른 날 화학 교사는 과학적 표기법 (소수를 사용하고 10을 곱하여 더 쉽게 표현할 수 있음) 에 대해 설명해 주었습니다. 기초를 배운 후, 우리는 전형적인 수학 문제를 많이했는데, 그 중 일부는 다음과 같습니다.
과학적 표기법으로 다음을 나타
냅니다
.a ) 50000000 b) 120000000000000
c) 90000000000000000000000000000000000000
d) pi ^ e ^ i ^ j ^ k ^ std :: vector
...
z) 200
...
"무엇입니까? 과학적 표기법은 많은 수의 글을 더 효율적으로 작성하는 데 사용되었지만 일부 경우는 더 효율적이지 않다고 들었습니다."
숫자를 고려하십시오
300
과학적 표기법으로 표현 :
3x10^2
과학적으로 표기된 버전은 실제로 더 많은 공간을 차지합니까? 우리는 지금 그것을 가질 수 없습니까? (스크린 공간은 소중합니다.)
과학적 표기법으로 숫자를 쓰는 것이 더 효율적인지 아닌지 스스로 결정할 수 있습니다.
직무
프로그램이나 함수는 n임의의 크기 의 단일 양수 (언어가 지원하는 것까지)를 입력으로 과학적으로 표기된 숫자 버전으로 출력해야합니다.
그러나 n후행 0을 제거하고 소수점 이하 자릿수를 제거한 후 원래 숫자 가 과학적으로 표기된 버전보다 표시 할 문자 수가 적거나 같은 경우 원래 숫자를 n대신 출력해야합니다 .
출력도 가능한 짧아야하므로 코드는 가능한 짧아야합니다.
명세서
효율적인 과학 표기법은 다음과 같이 정의됩니다.
bx10^e
b입력 숫자는 10의 거듭 제곱으로 적절히 나눈 값입니다 1 <= b < 10. 이 숫자는 모든 후행 0 (필요한 경우 소수점)을 제거해야하지만 원래 숫자의 정밀도 (언어의 소수점 이하 자릿수)를 가져야합니다. 즉 90000이된다 9, 13.500된다 1.35, 0.000675된다 6.75,이 번호 끝이 언어가 처리 할 수있는 것보다 더 많은 소수점을 포함 최대가 소수점의 최대로 반올림해야하는 경우 등.
e는 10이 증가 된 지수입니다 n = b x 10^e( n1보다 작 으면 이 숫자는 음수 여야 함을 기억하십시오 ). 이 숫자는 후행 0 또는 소수점 이하 자릿수를 가져서는 안됩니다 (주로 정수가 아닌 경우 무언가 잘못 되었기 때문에 ...).
문자 x10^ 는b 및 사이의 문자열에있는 그대로 유지 해야합니다e .
테스트 사례
Input -> output
1 -> 1
20 -> 20
3000000 -> 3x10^6
400000 -> 400000
0.008093 -> 0.008093
0.007835000000000 -> 0.007835
0.000003000000 -> 3x10^-6
0.00000065 -> 6.5x10^-7
0 -> 0
채점
이것은 code-golf 이므로 바이트 단위의 가장 짧은 코드가 이깁니다.
다른 규칙 및 설명
- 후행 0 및 / 또는 후행 소수점 자리는 원래 입력 번호의 문자 수에 포함되지 않습니다
n. 테스트 사례 6과 같은 경우를 염두에 두십시오. - 입력 번호가 1보다 작은 경우 테스트 번호 5-8에서와 같이 항상 1 자리 숫자로 0으로 시작한다고 가정 할 수 있습니다.
- 입력 번호는 음수가 될 수 없습니다
- 이 도전을 사소하고 표준 허점으로 만드는 내장 기능은 허용되지 않습니다
- 출력에서 후행 줄 바꿈은 정상입니다.
편집
테스트 사례 7과 8이 10의 잘못된 거듭 제곱을 지적한 user81655에게 감사합니다. 나는 그것들을 고쳤으므로 코드가 올바르게 평가하는지 확인하십시오.
e. 9000 -> 9e3(거의 9,000 이상 !)
x10^. 그리고 그것은 질문에 대한 약간의 재 작업이 될 것입니다. 나는 그것이 게시 된 지금 적절하다고 생각하지 않습니다.
pi^e^i^j^k^std::vector합니까?