c++怎么把一个十进制数转换成二进制,并计算二进制数最长连续1和0的长度
1个回答

很简单.如果这个十进制数的值在 C/C++ 语言本身所支持的范围内,如 char,short,int,long 之类,只需循环 N 次就能得到二进制值.这里的 N 等于数据类型的位数,如 char=8,short=16,int=32,long=32.转换的方法就是直接判断数据的每一位,示例代码(假定要转换一个值在0~4294967295之间的无符号长整型数)如下:

#include

#include

//参数 value 是要转换的数,len1 是要返回的连续1的最大长度,

//len0 是要返回的连续0的最大长度

void BinaryPrint( unsigned long value,int * len1,int * len0 )

{

int i,max0,max1;

*len1 = 0;

*len0 = 0;

max0 = 0;

max1 = 0;

//由于要转换的数值,也就是参数 value 是无符号长整型,占32位,

//所以循环32次

for( i=0; i> i) )

{ //遇到为1的位

if( max0 )

{ //且之前记下的连续0长度不为0

//保存连续0的最大长度

if( max0 > *len0 ) *len0 = max0;

max0 = 0;

max1 = 1;

}

else

{

max1++;

}

printf( "1" );

}

else

{

if( max1 )

{ //且之前记下的连续1长度不为0

//保存连续1的最大长度

if( max1 > *len1 ) *len1 = max1;

max1 = 0;

max0 = 1;

}

else

{

max0++;

}

printf( "0" );

}

}

printf( "n" );

}

#define __DO_TEST__ 1

#if __DO_TEST__

int main( int argc,char ** argv )

{

int max0,max1;

unsigned long val = 1234567890; //测试值,请任意修改

printf( "value = %lu:",val );

BinaryPrint( val,&max1,&max0 );

printf( "max0 = %d,max1= %dn",max0,max1 );

}

#endif