p1001

2024-01-04 14:48
文章标签 p1001

本文主要是介绍p1001,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.求int型数据在内存中存储时1的个数
输入一个int型数据,计算出该int型数据在内存中存储时1的个数。

我们很容易想到如下方法:

[cpp]  view plain copy
print ?
  1. #include <iostream>  
  2. using namespace std;  
  3. int main()  
  4. {  
  5.     int n,cnt=0;  
  6.     cin>>n;  
  7.     while(n)  
  8.     {  
  9.         if(n%2==1)  
  10.             cnt++;  
  11.         n=n/2;  
  12.     }  
  13.     cout<<cnt<<endl;  
  14.   
  15.     return 0;  
  16. }  


在对代码进行测试时输入负数无法得出结论,下面的方法将解决这一问题。

[cpp]  view plain copy
print ?
  1. #include <iostream>  
  2. using namespace std;  
  3. int GetCount(int n)  
  4. {  
  5.     int m=0;  
  6.     while(n)  
  7.     {  
  8.         n&=(n-1);  
  9.         m++;  
  10.     }  
  11.     return m;  
  12. }  
  13. int main()  
  14. {  
  15.     int a;  
  16.     cin>>a;  
  17.     cout<<GetCount(a)<<endl;  
  18. }  


如果我们把这个整数减去1,那么原来处在整数最右边的1就会变成0,原来在1后面的所有 的0都会变成1。其余的所有位将不受到影响。举个例子:一个二进制数1100,从右边数起的第三位是处于最右边的一个1。减去1后,第三位变成0,它后面 的两位0变成1,而前面的1保持不变,因此得到结果是1011。


我们发现减1的结果是把从最右边一个1开始的所有位都取反了。这个时候如果我们再把原来的整数和减去1之后的结果做与运算,从原来整数最右边一个1那一位 开始所有位都会变成0。如1100&1011=1000。也就是说,把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0。那么 一个整数的二进制有多少个1,就可以进行多少次这样的操作。

这篇关于p1001的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/569665

相关文章

洛谷:P1001 A+B Problem

1. 题目链接 https://www.luogu.com.cn/problem/P1001 A+B Problem 2. 题目描述 输入两个整数a和b,输出它们的和。 输入:两个整数 输出:一个整数 3. 我提交的题解 /*https://www.luogu.com.cn/problem/P1001A+B Problem题目描述:输入两个整数a和b,输出它们的和。输入:两个整数

Vijos:P1001谁拿了最多奖学金

描述 某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得; 2) 五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得; 3) 成绩优秀奖,每人2000元,期末平均成绩高于

洛谷-新手村的第一个任务:p1000 超级玛丽游戏、p1001 A+B problem、p1421小玉买文具、p1425小鱼的游戏时间

洛谷-新手村的第一个任务:p1000 超级玛丽游戏、p1001 A+B problem、p1421小玉买文具、p1425小鱼的游戏时间 重点:洛谷的第一个任务很入门,基本是给我们来适应这个平台所用的。1)p1000 超级玛丽游戏2)p1001 A+B problem3)p1421小玉买文具4)p1425小鱼的游戏时间小结 重点:洛谷的第一个任务很入门,基本是给我们来适应这个平台所

洛谷P1001#A+B Problem(Python实现)

题目描述 输入两个整数a,b,输出它们的和(|a|,|b|<=10^9)。 输入格式 两个整数以空格分开 输出格式 一个数 解答 a,b=map(int,list(input().split())) print(a+b) 编程语言Python 3 代码长度51B 用时78ms 内存3.64MB