hamming weight_leetcode Hamming weight汉明权重计算

Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the Hamming weight).

For example, the 32-bit integer ’11' has binary representation 00000000000000000000000000001011, so the function should return 3.

汉明权重指的是在一条字符串里 不同于’0‘字符的的这样的字符数目。

Hammingcode是指一个字串中非0符号的个数(TheHamming weight of a stringis the number of symbols that are different from the zero-symbol ofthealphabetused.)。应用到2进制符号序列中来,即二进制串中1的个数就是该串的Hammingcode.那么上述的问题即转换成求解字串的Hammingcode的问题。例如:

1.本来想利用自带的itoa()函数实现整数向二进制转换,没想到提交之后 implicit declaration of function ‘itoa’:

int hammingWeight(uint32_t n) {

char c[33];

memset(c,0,sizeof(c));

itoa(n,c,2);

int k=0;

int l=strlen(c);

for(int i=0;i

if(c[i]=='1')k++;

return k;

}

2.后来自定义一个itoa1()实现整数转换为二进制字符串,利用stack容器承接,还是不行:‘stack’ undeclared (first use in this function)

void itoa1(uint32_t n,char *s){

stackss;

int i=0;

do{ss.push(n%2);n=n/2;}while(n!=0);

while(!ss.empty())

{

s[i++]=ss.top()+'0';

ss.pop();

}

s[i]='\0';

}

int hammingWeight(uint32_t n) {

char c[33];

memset(c,0,sizeof(c));

itoa1(n,c);

int k=0;

int l=strlen(c);

for(int i=0;i

if(c[i]=='1')k++;

return k;

}3.最终:

void itoa1(uint32_t n,char *s){

int i=0;

do{s[i++]=(n%2)+'0';n=n/2;}while(n!=0);

s[i]='\0';

}

int hammingWeight(uint32_t n) {

char c[33];

memset(c,0,sizeof(c));

itoa1(n,c);

int k=0;

int l=strlen(c);

for(int i=0;i

if(c[i]=='1')k++;

return k;

}

4.输出反序后的整数:

void itoa1(uint32_t n,char *s){

int i=0;

do{s[i++]=(n%2)+'0';n=n/2;}while(n!=0);

s[i]='\0';

}

uint32_t reverseBits(uint32_t n) {

char c[33]={'0'};

itoa1(n,c);

int l=strlen(c);

if(l<33)

{for(int i=l;i<32;i++)

c[i]='0';

c[32]='\0';}

uint32_t sum=0;

for(int i=0;i<32;i++)

{

sum*=2;

sum+=c[i]-'0';}

return sum;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值