반올림 할 때 1을 더해야하기 전에 몇 개의 소수가 있습니까?


10

숫자를 반올림 할 때 다음 숫자가 1 >= 5을 더하면

3.1415926535 rounded to 1dp is 3.1
3.1415926535 rounded to 4dp is 3.1416    <-- Note the 5 changed to 6
3.1415926535 rounded to 5dp is 3.14159

3.1415926535 rounded to 9dp is 3.141592654  <-- Note the 3 changed to 4

정수를 입력으로 받아 숫자의 제곱근을 반올림하기 전에 소수점 이하 자릿수, 즉 숫자 자리 앞의 소수점 이하 자릿수를 출력해야 >= 5합니다.

정수는 0에서 100,000 사이에 포함되므로 59752의 경우는 17 소수점을 지원해야합니다 (17을 확인).

프로그래밍 언어에서 소수점 수를 변경할 수없는 경우 "?"를 표시 할 수 있습니다. 사용자에게 메시지.

예:

Input    Root                     Output

    5 -> 2.23 606797749979     -> 2
   41 -> 6.40312423 743284     -> 8      (Largest gap under 100)
  596 -> 24.4131112314 674     -> 10     (Largest gap under 1000)
59752 -> 244.44222221212112029 -> 16     (Largest gap under 100000)

완벽한 사각형에서 원하는 것을하십시오.

이것은 이므로 가장 짧은 코드가 승리합니다.


관심있는 사람은 310,617이라는 숫자가 1,000,000보다 크고 가장 큰 숫자는 18 >= 5입니다.


최대 몇 자릿수를 지원해야합니까? -언어를 무한정 정확하게 저장하지 않습니다.
Blue

이유는 확실하지 않지만 SQRT (59752)에 대해 17 자리 (2 개의 다른 언어)가 표시됩니다. 다른 결과는 올바르게 나옵니다.
Jonathan Leech-Pepin

@ JonathanLeech-Pepin 당신은 어떤 이유로 마지막 자리를 포함하고 있습니까? 또는 프로그램이 소수점 이하 자릿수를 충분히 지원하지 않습니다.
Tim

숫자가 5보다 크지 않습니다. 예를 들어 내 프로그램은 -1로 종료됩니다.
Blue

@muddyfish 괜찮습니다.
Tim

답변:



2

Pyth, 13 바이트

f<5e@=*QC\d2Z

테스트 스위트

Q입력 과 동일하게 시작하십시오 . 각 시간 단계에서로 곱하여 Q100을 곱 합니다 chr('d'). 제곱근을 취하십시오. 이 모드 10을 사용하십시오. 결과가보다 크면 5종료하십시오. 종료하는 데 필요한 반복 횟수 (0- 인덱스)를 인쇄하십시오.

상세히:

f<5e@=*QC\d2Z
                   Q = eval(input())
f           Z      Filter for the first truthy result over the infinite sequence
                   starting at Z (= 0)
     =*Q           Q *=
        C\d             chr('d') (= 100)
                   ---------------------
    @  Q   2          Q ^ (1/2)
   e                            % 10
 <5               5 <


1

Pyth, 22 바이트

J`%@Q2 1x.e<\4@Jbr2lJ1

설명

                       - Autoassign Q to evaluated input
   @Q2                 - Get the square root of Q
J`%    1               - Get the stuff after the decimal point and put it in a string. Store in J
         .e      r2lJ  - Create a range between 2 and the length of the string (forget about the 0. bit) and enumerate over it
              @Jb      - Get the current decimal place
           <\4         - Is it bigger than 4
        x            1 - Find the position of the first True value

나는 이것이 골프를 칠 수 있다고 확신합니다. 입력의 숫자가 4보다 크지 않으면 -1을 인쇄합니다. 17dp를 지원합니다.


1

자바 스크립트, 59 바이트

f=a=>(a=/\.(.*?)[5-9]/.exec(Math.sqrt(a)),a?a[1].length:'?')

?JavaScript는 배정도 만 사용하므로 59752를 반환 합니다.


1

리눅스 쉘, 52 바이트

dc -e'34k?vp'|cut -d. -f2|sed 's/.[5-9\s].*//'|wc -m

순수한 dc해결책을 시도 했지만 실패했습니다. 정밀도는 조정 가능합니다 (첫 번째 숫자).

OP는 "완벽한 사각형에서 원하는 것을 할 수 있습니다"라고 친절하게 지정 하므로이 솔루션은 정밀도 + 1을 출력합니다 (이 경우 35).


1

Mathematica 60 바이트

(Position[Drop@@RealDigits[N[Sqrt@#,99]],x_/;x>4][[1,1]]-1)&

(Position[Drop@@RealDigits[N[Sqrt@#, 99]], x_ /; x > 4][[1, 1]] - 1) &[59752]

16


주변의 공백을 제거 할 수 있습니다 Apply.
LegionMammal978

감사. 바이트 수는 그 공간을 계산하지 않았기 때문에 동일하게 유지됩니다.
DavidC

-2

루비, 46 바이트

16 자리 만 사용할 수 있으므로 유효하지 않을 수 있습니다.

p (gets.to_i**0.5).to_s.split('.')[1]=~/[5-9]/

59752의 출력은 무엇입니까?
Tim

nil전체 문자열에 4를 초과하는 숫자가 없으므로. 루비 버전에 따라 다를 수 있습니다.
MegaTom

59752를 지원해야하므로 17 dps가 필요함
Tim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.