Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2791004
  • 博文数量: 471
  • 博客积分: 7081
  • 博客等级: 少将
  • 技术积分: 5369
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 21:55
文章分类

全部博文(471)

文章存档

2014年(90)

2013年(69)

2012年(312)

分类: C/C++

2012-07-13 10:52:50

在编程之美上看到如下做法: 

把byte数据取2的模,如果余数为1则说明当前位置出现的是1,否则是0,然后不断把byte往右边移位,也就是除以2, 

代码如下: 

Java代码  收藏代码
  1. public static int countByte(byte b)  
  2.     {  
  3.         int count = 0;  
  4.         while (b > 0)  
  5.         {  
  6.             if (b % 2 == 1)  
  7.             {  
  8.                 ++count;  
  9.             }  
  10.             b = (byte)(b / 2);  
  11.         }  
  12.         return count;  
  13.     }  


这个算法可以通用化。
问题通用描述,一个byte数据,用N进制表达,请统计数字Digit出现的次数。

public static int countByte(byte b, int N, int Digit)  
    {  
        int count = 0;  
        while (b > 0)  
        {  
            if (b % N == Digit)  
            {  
                ++count;  
            }  
            b = (byte)(b / N);  
        }  
        return count;  
    }  
阅读(491) | 评论(0) | 转发(0) |
0

上一篇:sql in 优化

下一篇:栈acm应用

给主人留下些什么吧!~~