how to translate base 10 number into base 2 number

C

chen li

Hi all,

I want to write a method to tranlate base 10 number
into base 2 number. I want to call the method within
itself. But it doesn't work. What is the right way
to do something like this?

Thanks,

Li

#####
def ten_to_two(num1)
@array=[]
if num1>2
first,second=num1.divmod(2)
@array<<second

#call the method itself
ten_to_two(first)

else
@array<<second<<first
end
return @array.reverse
end

puts ten_to_two(5)

##output
ruby assembly1.rb nil
nil
Exit code: 0






____________________________________________________________________________________
8:00? 8:25? 8:40? Find a flick in no time
with the Yahoo! Search movie showtime shortcut.
http://tools.search.yahoo.com/shortcuts/#news
 
E

Eric I.

Hi Li,

First, here's a solution:

def ten_to_two(num1)
return [] if num1 <= 0
first,second=num1.divmod(2)
ten_to_two(first) << second
end

And note that you can change the << into a call to unshift if you want
the bits in the reverse order.

As for why your solution didn't work, let me offer two things. First,
you never do anything with the result of your recursive call to
ten_to_two. Somehow you need to combine it with the partial result you
calculated immediately beforehand. Second, you're using instance
variables (tagged with the @). That's generally done in methods
defined within a class to hold the state of the instance. For a
"naked" method, you generally stick to local variables (no @).

Eric

================
Interested in hands-on, on-site Ruby training? See www.LearnRuby.com
for information about a well-reviewed class.

chen said:
Hi all,

I want to write a method to tranlate base 10 number
into base 2 number. I want to call the method within
itself. But it doesn't work. What is the right way
to do something like this?

Thanks,

Li

#####
def ten_to_two(num1)
@array=[]
if num1>2
first,second=num1.divmod(2)
@array<<second

#call the method itself
ten_to_two(first)

else
@array<<second<<first
end
return @array.reverse
end

puts ten_to_two(5)

##output
ruby assembly1.rb nil
nil
Exit code: 0
 
K

khaines

Hi all,

I want to write a method to tranlate base 10 number
into base 2 number. I want to call the method within
itself. But it doesn't work. What is the right way
to do something like this?

This doesn't answer your question, but in case you were not aware, Ruby
will do this conversion for you:


a = 125
puts a.to_s(2)
1111101


Kirk Haines
 
U

Uma Geller

TAWLWTDIT

[0xFF].pack("c").unpack("b8")

there's a whole lotta ways to do it :)


This doesn't answer your question, but in case you were not aware, Ruby
will do this conversion for you:


a = 125
puts a.to_s(2)
1111101


Kirk Haines
 
R

Robert Klemme

TAWLWTDIT

[0xFF].pack("c").unpack("b8")

there's a whole lotta ways to do it :)

Since we start collecting solutions...

irb(main):001:0> "%b" % 16
=> "10000"

:)

robert
 
G

Giles Bowkett

I wonder why there isn't support for negative radix; even though the
solutions might not be unique... who cares?

Come on, that's like asking why fractional dimension isn't a primitive
type in Java.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top