四捨五入時に1を追加する必要がある前に、小数点以下はいくつありますか?


10

数値を丸めるときに、次の桁が>= 51である場合は、例を示します。

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何らかの理由で最後の桁を含めていますか?または、プログラムで十分な小数点以下の桁数がサポートされていません。
ティム

これは、例えば5.私のプログラムは-1で終了しますより大きな桁持っていません
ブルー

@muddyfishそれは結構です。
Tim

回答:



2

Pyth、13バイト

f<5e@=*QC\d2Z

テストスイート

Q入力と等しいものから始めます。各タイムステップで、Q100を掛けchr('d')ます。その平方根を取ります。このmod 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が出力されます。17 dpをサポートします。


1

JavaScript、59バイト

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

?JavaScriptは倍精度のみを使用するため、59752を返します。


1

Linuxシェル、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 2015年

ありがとう。私はそれらのスペースを数えなかったので、バイト数は同じままです。
DavidC、2015年

-2

Ruby、46バイト

16桁にしか適合しないため、これは有効でない場合があります。

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

59752の出力は何ですか?
Tim

nil、4を超える数字は文字列全体に含まれないため。Rubyのバージョンによって異なる場合があります。
MegaTom 2015年

59752をサポートする必要があるため、17 dpsが必要
Tim
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.