面试题:将一个数用二进制打印输出…

来源:互联网 发布:淘宝供货商怎么找免费 编辑:程序博客网 时间:2024/06/06 07:32
2015年5月9日13:25:59
一回寝室,室友就考我他遇到的一道面试题,题目是这样的:将一个数用二进制打印输出并且输出二进制中“1”的个数;
想必只要学过编程的同学都能很快想出自己的方案。我室友他说了一个很复杂的思路。我想面试官不会给你那么长的时间来写这个代码。而我个人比较偷懒,正符合了面试官这一点,只用了一个while循环,轻松搞定。为了突出思路,二进制输出没做过多处理,是从右到左。比如bin(10) = 1010 ;而我的输出是 0101 ,又比如 bin(100)= 1100100  ,而我的输出从右到左 0010011 。这一点可以使用数组,也可以使用字符串来稍加处理。为了代码简单思路清晰,我没有做这方面处理了。我提供的是自己的思路,希望对初学编程语言的朋友有所帮助。

// D2B.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
    int tmp,count=0;
    scanf_s("%d",&tmp);
 
    while (tmp !=0)
      {
          if(tmp & 1)
             {
                printf("1");
               count++;
             }
          else
            printf("0");
         tmp >>=1;
      }
   printf("\n%d\n",count);
   for (;;);              //此处只是为了方便查看结果
   return 0;
}


好吧,由于强迫症,我还是把处理过后的也写了,贴出来。也就是从左至右符合人类认识事物的特性了。不过还是为了简洁,我使用的一些内置类和函数。

// D2B.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "string"

int _tmain(int argc, _TCHAR* argv[])
{
   int i, tmp, count =0;
   std::string str ="";
   scanf_s("%d",&i);
   tmp = i;

   while (tmp !=0)
      {
         if (tmp &1)
            {
               str += "1";
               count++;
            }
         else
            str += "0";
         tmp >>=1;
      }
   std::reverse(str.begin(),str.end());
   printf("bin(%d) :%s\n", i, str.c_str());
   printf("count(1) :%d\n", count);
   for (;;);
   return 0;
}












0 0
原创粉丝点击