C中的十进制到二进制转换

Abh*_*Ray 1 c binary search function decimal

实现inspect_bits函数,该函数检查给定数字是否在其二进制表示中包含2个或更多连续的.如果是,则该函数应返回1.否则,它应返回0.

例如,inspect_bits(13)应返回1,因为它在其二进制表示(1101)中包含2个连续的1.

该程序适用于某些数字,在这种情况下为13,还有一些,但是,该程序不适用于'8','10'以及其他一些数字.

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

int inspect_bits(unsigned int number)
{
    int arr[32];
    int i=0,temp,c=0;;

    while(number > 0)
    {
        arr[i] = number%2;
        number = number/2;
        i++;
    }
    for (int j=i-1; j>=0; j--)
    {
        temp = arr[j];
            for (int k=j+1; k>0; k--)
            {
                if (temp==arr[k])
                c++;
            }
    }
    if (c != 0)
        return 1;
    else
        return 0;
}

#ifndef RunTests
int main ()
{
    printf("%d", inspect_bits(13));
}
#endif
Run Code Online (Sandbox Code Playgroud)

usr*_*301 5

这看起来方式太复杂,作为一种算法实现和调试.这更简单:

int inspect_bits(unsigned int number)
{
   while (number)
   {
      if ((number & 3) == 3)
          return 1;
      number >>= 1;
   }
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

循环测试3的最后两位number,即00000011二进制.如果这匹配,那么(至少!)有两个连续的位number.如果不是,则将number位移到右侧并再次测试.当number达到0 时,循环可以停止- 技术上,即使while (number > 2)只有高于2的值有两个以上的连续位.