Có bao nhiêu số thập phân trước khi tôi cần thêm 1 khi làm tròn?


10

Khi bạn làm tròn một số, nếu chữ số tiếp theo là >= 5bạn thêm 1. Ví dụ:

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

Bạn thách thức là nhận được một số nguyên làm đầu vào và đầu ra số vị trí thập phân trước đó bạn sẽ phải làm tròn căn bậc hai của số - tức là số vị trí thập phân trước khi xuất hiện một chữ số >= 5.

Số nguyên sẽ nằm trong khoảng từ 0 đến 100.000, vì vậy đối với trường hợp cạnh 59752, bạn cần hỗ trợ 17 điểm thập phân (để kiểm tra lần thứ 17).

Nếu ngôn ngữ lập trình của bạn không thể thay đổi số điểm thập phân, bạn có thể hiển thị dấu "?" nhắn tin cho người dùng.

Thí dụ:

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)

Làm những gì bạn muốn trên hình vuông hoàn hảo.

Đây là nên mã ngắn nhất sẽ thắng.


Đối với bất kỳ ai quan tâm, số 310.617 là lớn nhất dưới 1.000.000 và có 18 trước khi bạn đạt được một chữ số >= 5.


Chúng ta cần hỗ trợ tối đa bao nhiêu số thập phân? - Không có ngôn ngữ lưu trữ đến độ chính xác vô hạn.
Màu xanh

Không chắc chắn tại sao, nhưng tôi nhận được 17 chữ số cho SQRT (59752) (bằng hai ngôn ngữ khác nhau). Các kết quả khác đi ra đúng.
Jonathan Leech-Pepin

@ JonathanL336-Pepin bạn có bao gồm chữ số cuối cùng vì một số lý do? hoặc chương trình của bạn không hỗ trợ đủ số thập phân.
Tim

Nó không bao giờ có chữ số lớn hơn 5. Ví dụ, chương trình của tôi sẽ thoát với -1
Blue

@muddyfish đó là tốt.
Tim

Câu trả lời:



2

Bình thường, 13 byte

f<5e@=*QC\d2Z

Bộ kiểm tra

Bắt đầu Qbằng với đầu vào. Ở mỗi bước thời gian, nhân Qvới 100, tính như chr('d'). Lấy căn bậc hai của nó. Lấy mod này 10. Nếu kết quả lớn hơn 5, chấm dứt. In số lần lặp cần thiết để kết thúc, được lập chỉ mục 0.

Chi tiết:

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

CJam, 29 26 28 byte

rimqs_'.+'.#)>{'5<}%0#]W'?er

Hãy thử trực tuyến.

Đặt một "?" nếu số không xuất hiện có thể được làm tròn lên (hình vuông hoàn hảo hoặc quá dài).


1

Bình thường, 22 byte

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

Giải trình

                       - 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

Tôi hoàn toàn chắc chắn điều này có thể được chơi golf. Nếu đầu vào không có chữ số cao hơn 4, nó sẽ in -1. Hỗ trợ 17dp.


1

Javascript, 59 byte

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

Trả về ?59752 vì JavaScript chỉ sử dụng độ chính xác kép.


1

Vỏ Linux, 52 byte

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

Tôi đã cố gắng cho một dcgiải pháp thuần túy , nhưng không thành công. Độ chính xác được điều chỉnh (số đầu tiên).

Vì OP vui lòng chỉ định rằng "bạn có thể làm những gì bạn muốn trên các ô vuông hoàn hảo", trong trường hợp này, giải pháp này đưa ra độ chính xác + 1, trong trường hợp này là 35.


1

Toán học 60 byte

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

Thí dụ

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

16


Bạn có thể loại bỏ khoảng trắng xung quanh Apply.
LegionMammal978 7/11/2015

Cảm ơn. Số lượng byte giữ nguyên vì tôi đã không đếm những khoảng trống đó.
DavidC

-2

Ruby, 46 byte

Điều này có thể không hợp lệ, vì nó chỉ phù hợp với 16 chữ số.

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

Đầu ra trên 59752 là gì?
Tim

nil, vì không có chữ số nào trong 4 chữ số trong toàn bộ chuỗi. Nó có thể phụ thuộc vào phiên bản ruby.
MegaTom

Nó cần hỗ trợ 59752 - vì vậy cần 17 dps
Tim
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.