l i n u x - u s e r s - g r o u p - o f - d a v i s
L U G O D
 
Next Meeting:
September 2: Social gathering
Next Installfest:
TBD
Latest News:
Aug. 18: Discounts to "Velocity" in NY; come to tonight's "Photography" talk
Page last updated:
2005 Sep 20 14:21

The following is an archive of a post made to our 'vox-tech mailing list' by one of its subscribers.

Report this post as spam:

(Enter your email address)
Re: [vox-tech] [OT] Binary Representation Challenge
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [vox-tech] [OT] Binary Representation Challenge



On Tue, 2005-09-20 at 12:02, Alex Mandel wrote:
> I realize this might be not be a challenge for some of you.
> --
> I need to make a list of all possible permutations given 9 options and 
> that you can choose any number of options at once.
> I've figured out using nCr statistics that this is 511 choices, but now 
> I need to represent them in 2^9 binary code: 000000001, 000000010 etc

The following code should work:

/* binary_count.c					*/
/* ---------------------------------------------------- */
/* By Tim Riley						*/
/* ---------------------------------------------------- */
/* Compile: cc -Wall binary_count.c -o binary_count	*/
/* ---------------------------------------------------- */

#include <stdio.h>
#include <stdlib.h>

#define NUMBER_BINARY_DIGITS	16

/* From "The C Programming Language" by Kernighan and Ritchie */
/* ---------------------------------------------------------- */
unsigned getbits( unsigned integer, unsigned position, unsigned n )
{
	return ( integer >> ( position + 1 - n ) ) & ~( ~0 << n );
}

char *integer2binary( unsigned integer )
{
	static char binary[ NUMBER_BINARY_DIGITS + 1 ] = {0};
	char *pointer;
	int i;

	pointer = binary;
	for ( i = 0; i < NUMBER_BINARY_DIGITS; i++, pointer++ )
		*pointer = '0';

	pointer = binary + NUMBER_BINARY_DIGITS - 1;

	for( i = 0; i < NUMBER_BINARY_DIGITS; i++, pointer-- )
	{
		if ( getbits( integer, i, 1 ) ) *pointer = '1';
		
	}

	return binary;
}

int main( int argc, char **argv )
{
	unsigned count_up_to;
	unsigned count;

	if ( argc != 2 )
	{
		fprintf( stderr, "Usage: %s count_up_to\n", argv[ 0 ] );
		return 1;
	}

	count_up_to = atoi( argv[ 1 ] );

	for ( count = 0; count < count_up_to; count++ )
		printf( "%s\n", integer2binary( count ) );

	return 0;
}


<snip>

_______________________________________________
vox-tech mailing list
vox-tech@lists.lugod.org
http://lists.lugod.org/mailman/listinfo/vox-tech



LinkedIn
LUGOD Group on LinkedIn
Sign up for LUGOD event announcements
Your email address:
facebook
LUGOD Group on Facebook
'Like' LUGOD on Facebook:

Hosting provided by:
Sunset Systems
Sunset Systems offers preconfigured Linux systems, remote system administration and custom software development.

LUGOD: Linux Users' Group of Davis
PO Box 2082, Davis, CA 95617
Contact Us

LUGOD is a 501(c)7 non-profit organization
based in Davis, California
and serving the Sacramento area.
"Linux" is a trademark of Linus Torvalds.

Sponsored in part by:
O'Reilly and Associates
For numerous book donations.