|


Program to Convert Number Bases
Date: 07/12/99 at 11:02:43
From: Mike Manson
Subject: Easier way to convert base systems of numbers
Hi,
I've learned that you can convert the base system of a number using
the following method:
12461 base 10 --> base 4
4|12461
3115 r 1
778 r 3
194 r 2
48 r 2
12 r 0
3 r 0
0 r 3
then you take the remainders and read them backwards. So 12461 in base
4 = 3002231.
This way works and I do understand the basic concepts of raising to
whatever power involved in base conversions. I just need an easier way
to do this. I am writing a computer program that will incorporate this
function, and while I can use something similar to the above inside a
programming loop, it would be easier if there were a way to do it
using some type of equation expression. Someone suggested that there
is an equation using log functions that can be used for base
conversion. Any ideas?
Date: 07/12/99 at 12:45:01
From: Doctor Peterson
Subject: Re: Easier way to convert base systems of numbers
Hi, Mike.
The method you've demonstrated is by far the easiest method I know,
and is exactly what I would use for a computer program. Any method you
use will give you one digit at a time in a loop. There is a way that
starts out by using the logarithm to find how many digits you need,
then works from left to right rather than right to left; but logs are
much slower then the divisions this method uses. If you want to get
the digits of a number N from left to right, I would first just
multiply 1 by the base repeatedly until the result, A, passes the
number to be converted (this gives how many digits you will need);
then get each digit by dividing this number A by the base to make it
less than N, and divide N by A. The quotient is the digit to print and
the remainder takes the place of N for the next step. For example, to
convert 123 to base 4,
1 * 4 = 4
4 * 4 = 16
16 * 4 = 64
64 * 4 = 256 > 123
256 / 4 = 64; 123 / 64 = 1 rem 59 ---> digit 1
64 / 4 = 16; 59 / 16 = 3 rem 11 ---> digit 3
16 / 4 = 4; 11 / 4 = 2 rem 3 ---> digit 2
4 / 4 = 1; 3 / 1 = 3 rem 0 ---> digit 3
The answer is 1323 base 4.
As you can see, that takes the same amount of work for each step as
your method, and a little extra work at the start. Both ways are
equally easy to program.
Perhaps if you tell me what programming language you are using, I can
help you see how to write these algorithms. Let me know if you need
more help.
- Doctor Peterson, The Math Forum
http://mathforum.org/dr.math/
Date: 07/12/99 at 21:48:30 From: (anonymous) Subject: Re: Easier way to convert base systems of numbers Thanks for the reply. I'm using C++ and based on the first way, I've come up with a program fragment that doesn't seem to work at this time. If you have any suggestions or examples, it would be extremely useful. Much appreciation, Matt Date: 07/13/99 at 08:49:19 From: Doctor Peterson Subject: Re: Easier way to convert base systems of numbers Hi, Mike. I'll try to put together a quick program for this, but what might be more useful (and quicker) is for you to send me your program (or at least the fragment that isn't working) so I can see what's wrong with it. That way we can help you correct your own thinking (or maybe just typing) rather than merely copy mine. I'll be waiting. - Doctor Peterson, The Math Forum http://mathforum.org/dr.math/ Date: 07/13/99 at 17:50:03 From: (anonymous) Subject: Re: Easier way to convert base systems of numbers Yeah, I thought that would be the best way and I wanted to send it to you but the only problem is that the computer I have Turbo C++ installed on doesn't have any Internet connection and it has one of those old 5 1/4" floppy drives (*ouch*). Don't laugh, I do have a very good computer but it's a family one and I barely get enough time to work on it without someone else needing it. I'll see if I can just recopy for you. Otherwise, if you don't have enough time to write the actually code, a program outline, pseudocode type outline would be helpful. Thank you, Matt Date: 07/13/99 at 22:30:08 From: Doctor Peterson Subject: Re: Easier way to convert base systems of numbers Hi, Matt. You sound like my son, who has Turbo C++ on our old computer, and before that used our yet older 286 with only a 5 1/4" drive. We have managed to network him with our Pentium, but it's still limiting. All you have to send me should be the main loop that does the actual conversion, so don't try to copy the whole thing by hand. What I have in mind would be only a few lines, unless you're doing more than just converting. I did start writing my own version, and I'll probably send it after I see yours, once I get it done. - Doctor Peterson, The Math Forum http://mathforum.org/dr.math/
Date: 07/16/99 at 17:09:20
From: Doctor Peterson
Subject: Re: Easier way to convert base systems of numbers
Hi, Matt. Since I haven't heard back from you, I wanted to send my
code for converting bases, so you can see what I did. I suspect you
may be taking a different approach, and I'd still like to see it.
Here are my two versions, based on the algorithm you first sent me and
the one I sent back. Each has its advantages:
// right-to-left algorithm
while (n > 0)
{ // extract rightmost digit, convert to ASCII
char digit = '0' + n % base;
if (digit > '9')
digit += ('A' - '9' - 1);
// add digit to right of string
string = digit + string;
// remove digit from number
n = n / base;
}
// left-to-right algorithm
int divisor = 1;
while (divisor <= n)
{ // find first power of base above number
divisor *= base;
}
while ((divisor /= base) >= 1)
{ // extract leftmost digit, convert to ASCII
char digit = '0' + n / divisor;
if (digit > '9')
digit += ('A' - '9' - 1);
// add digit to left of string
string = string + digit;
// remove digit from number
n = n % divisor;
}
In both cases, n is the number to be converted to a text string in the
given base. I extract one digit at a time, and put the digit into
ASCII form so that alphabetic characters follow numeric, as in hex;
this can handle any base up to 36! I used a string object to hold the
results; for the left-to-right version, you could just print out one
character at a time.
By the way, my first version of the l-to-r version didn't work right
for some numbers, because I got the second while wrong. It is a little
tricky.
- Doctor Peterson, The Math Forum
http://mathforum.org/dr.math/
|
Search the Dr. Math Library: |
[Privacy Policy] [Terms of Use]


Ask Dr. MathTM
© 1994-2013 The Math Forum
http://mathforum.org/dr.math/