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

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 06:47:22

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

c++怎么把一个十进制数转换成二进制,并计算二进制数最长连续1和0的长度
很简单.如果这个十进制数的值在 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= %d\n",max0,max1 );
}
#endif