มีทศนิยมอยู่กี่อันก่อนที่ฉันจะต้องบวก 1 เมื่อปัดเศษ?


10

เมื่อคุณปัดเศษตัวเลขถ้า>= 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

คุณท้าทายคือการได้รับจำนวนเต็มเป็น input และ output จำนวนตำแหน่งทศนิยมก่อนที่คุณจะต้องรอบรากที่สองของจำนวน - คือจำนวนตำแหน่งทศนิยมก่อนหลัก anumber ซึ่งเป็น>= 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ก่อนที่จะถึงหลัก


เราต้องสนับสนุนทศนิยมสูงสุดกี่ตำแหน่ง - ไม่มีภาษาจัดเก็บเพื่อความแม่นยำไม่มีที่สิ้นสุด
บลู

ไม่แน่ใจว่าทำไม แต่ฉันได้รับ 17 หลักสำหรับ SQRT (59752) (ในสองภาษาที่แตกต่างกัน) ผลลัพธ์อื่นออกมาอย่างถูกต้อง
Jonathan Leech-Pepin

@ JonathanLeech-Pepin คุณรวมตัวเลขหลักสุดท้ายด้วยเหตุผลอะไรบ้าง? หรือโปรแกรมของคุณไม่สนับสนุนตำแหน่งทศนิยมที่เพียงพอ
ทิม

มันไม่เคยมีตัวเลขที่ใหญ่กว่า 5 ตัวอย่างโปรแกรมของฉันจะออกด้วย -1
Blue

@muddyfish ก็ดี
ทิม

คำตอบ:



2

Pyth, 13 ไบต์

f<5e@=*QC\d2Z

ชุดทดสอบ

เริ่มต้นด้วยQเท่ากับอินพุต ในแต่ละขั้นตอนเวลาคูณQด้วย 100 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

CJam, 29 26 28 bytes

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

ลองออนไลน์

วาง "?" หากตัวเลขไม่ปรากฏว่าสามารถปัดเศษได้ (สี่เหลี่ยมจัตุรัสที่สมบูรณ์หรือยาวเกินไป)


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

Javascript, 59 ไบต์

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

ส่งคืน?59752 เนื่องจาก JavaScript ใช้ความแม่นยำสองเท่าเท่านั้น


1

Linux shell ขนาด 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

Ruby, 46 ไบต์

สิ่งนี้อาจไม่ถูกต้องเนื่องจากมันพอดีกับตัวเลข 16 หลักเท่านั้น

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

ผลลัพธ์ของ 59752 คืออะไร?
ทิม

nilเนื่องจากไม่มีตัวเลข 4 ตัวในสตริงทั้งหมด มันอาจขึ้นอยู่กับรุ่นทับทิม
MegaTom

มันต้องการการสนับสนุน 59752 - ดังนั้นต้องการ 17 dps
Tim
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.