Yuvarlama sırasında 1 eklemem gerekmeden önce kaç ondalık sayı var?


10

Bir sayıyı yuvarladığınızda, sonraki basamak 1 ise >= 5eklersiniz. Örneğin:

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

Meydan okuma, girdi olarak bir tamsayı almak ve sayının karekökünü yuvarlamak istediğiniz ondalık basamak sayısını - yani gerçekleşen bir sayı basamağından önceki ondalık basamak sayısını çıkarmaktır >= 5.

Tam sayı 0 ile 100.000 arasında olacaktır, bu nedenle 59752'nin kenar durumu için 17 ondalık noktasını desteklemeniz gerekir (17'yi kontrol etmek için).

Programlama dili ondalık nokta sayısını değiştiremezse, "?" kullanıcıya mesaj.

Misal:

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)

Mükemmel karelerde istediğinizi yapın.

Bu çok kısa kod kazanır.


İlgilenenler için 310,617 sayısı 1.000.000'un altındaki en büyük sayıdır ve bir rakama ulaşmadan önce 18'dir >= 5.


En fazla kaç ondalık basamak desteklememiz gerekiyor? - Sonsuz hassasiyet için hiçbir dil saklanmaz.
Mavi

Neden olduğundan emin değilim, ancak SQRT (59752) için 17 basamak alıyorum (iki farklı dilde). Diğer sonuçlar düzgün çıkıyor.
Jonathan Leech-Pepin

@ JonathanLeech-Pepin herhangi bir nedenle son basamağı dahil ediyor musunuz? veya programınız yeterince ondalık basamak desteklemiyor.
Tim

Asla 5'ten büyük bir rakam içermez. Programım örneğin -1
Blue

muddyfish bu iyi.
Tim

Yanıtlar:



2

Pyth, 13 bayt

f<5e@=*QC\d2Z

Test odası

QGirişe eşit ile başlayın . Her zaman adımında, Q100 ile çarpın , olarak hesaplanır chr('d'). Karekökünü al. Bu modu 10 al. Sonuç büyükse 5sonlandır. Sonlandırmak için gereken 0 yinelemeli yineleme sayısını yazdırın.

Detayda:

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 bayt

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

açıklama

                       - 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

Bunun golf oynayabileceğinden kesinlikle eminim. Girişin 4'ten büyük bir rakamı yoksa -1 yazdırır. 17dp'yi destekler.


1

Javascript, 59 bayt

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

?JavaScript yalnızca çift kesinlik kullandığından 59752 değerini döndürür .


1

Linux kabuğu, 52 bayt

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

Saf bir dcçözüm denedim ama başarısız oldum . Hassasiyet ayarlanabilir (ilk sayı).

OP nazikçe "mükemmel karelerde istediğinizi yapabilirsiniz" belirttiği gibi, bu durumda bu çözüm hassasiyeti + 1, bu durumda 35 verir.


1

Mathematica 60 bayt

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

Misal

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

16


Çevresindeki boşluğu kaldırabilirsiniz Apply.
LegionMammal978

Teşekkürler. Bayt sayısı aynı kalır çünkü ben bu alanları saymamıştım.
DavidC

-2

Yakut, 46 Bayt

Bu sadece 16 haneye sığdığı için geçerli olmayabilir.

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

59752'nin çıktısı nedir?
Tim

nil, tüm dizede 4'ü geçmeyen bir rakam olmadığından. Yakut versiyonuna bağlı olabilir.
MegaTom

59752'yi desteklemesi gerekiyor - bu yüzden 17 dps gerekiyor
Tim
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.