2016-06-01 12 views
-6

Ich will Zahl teilen, ohne divide OperatorDividieren Zahl ohne divide Operator mit Ruby

def divede_me(val,ded) 
    i = 1; new_num=0 
    rem = val % ded 
    val = val - rem 
    while (val != new_num) 
     i += 1  
     new_num = ded * i  
    end 
    return i 
end 

p divede_me(14,4) 

obigen Skript Rückkehr 3, aber ich mag auch Floating-Point (für Ex. 3,5) und bester Weg, über Skript zu schreiben.

+1

, warum Sie brauchen Hilfe dieser Diese Logik können Sie? – Thorin

+0

zur Verbesserung der Skriptfähigkeit in Ruby. – Amit

+5

'val ./ (ded.to_f)' verwendet keinen Ruby-Operator im Syntax-Sinn. 'Math.exp (Math.log (val) - Math.log (ded))' führt keine Division direkt durch, implementiert jedoch keine Divisionslogik, wie sie von einem fp-Prozessor ausgeführt wird. Ich kann mir nicht vorstellen, wie beide das Script-Schreiben verbessern. Das Problem ist mehr eine Informatik oder Mathe Sache. Könntest du das Ziel dessen, was du mit "Betreiber" meinst, klarer definieren und welche Art von Lösungen, die dir gesagt wurden, sind erlaubt? Ohne ein klares Ziel ist der "beste" Weg, um dieses Skript zu schreiben *, das Skript nicht zu schreiben *. . . vor allem, wenn "am besten" bedeutet, am effizientesten –

Antwort

1
def divide_me(val,ded) 
    i = 1; new_num=0 
    rem = val.to_f % ded 
    val = val - rem 
    while (val != new_num) 
     i += 1 
     new_num = ded * i 
    end 
    temp = 0.01 
    temp += 0.01 until ded * temp >= rem 
    return i + temp.round(2) 
end 

p divide_me(14,4) 
=>3.5 
p divide_me(15,4) 
=>3.75 
p divide_me(16,7) 
=>2.29 

Wenn Sie Ihren vorhandenen Code erweitern, erhalten Sie damit eine vernünftige Genauigkeit von 2 Dezimalstellen. Entferne die .round (2), um zu sehen, wie ungenau Floats sind.

0

val = 14 
ded = 4 

r = val % ded 
value = val -r 

v_ck = 0 
i = 0 
while(value != v_ck) 

    i+=1 
    v_ck = ded * i 
end 

ded_ck = 0 
j = 0 
while(ded_ck != ded)  
    j += 1 
    ded_ck = r * j 
end 

puts i.to_s+"."+j.to_s