问题 B: Hz的进制 ゝ一世哀愁。 2022-05-27 09:58 107阅读 0赞 ## 问题 B: Hz的进制 ## ## 题目描述 ## Hz遇到一个数学问题,想请教聪明的你:给定一个有符号整数类型的数,Hz想知道该数 二进制表示中1的个数。其中负数用补码表示。 ## 输入 ## 测试样例输入包含一个有符号整数类型的整数n,注意可以是负数 ## 输出 ## 该数二进制表示中1的个数。其中负数用补码表示。 ## 样例输入 ## 1 \-5 ## 样例输出 ## 1 31 ## 提示 ## int占用4字节,32比特(即32位),数据范围为-2147483648~2147483647\[-2^31~2^31-1\] 负整数的补码求法:将其对应正数二进制表示所有位取反(包括符号位,0变1,1变0)后加1 如 -5 其二进制补码1的个数为31 \-5对应正数5(00000000000000000000000000000101) →所有位取反(11111111111111111111111111111010) →加1 (11111111111111111111111111111011) 】 [点击打开链接][Link 1] #include<bits/stdc++.h> using namespace std; int main() { int n,sum,flag; while(~scanf("%d",&n)) { sum=0; flag=0; if(n>=0) { while(n) { if(n%2==1) { sum++; } n=n/2; } printf("%d\n",sum); } else { n=-n; while(n) { if(flag==0&&n%2==0) { sum++; } if(flag==1&&n%2==1) { sum++; } if(n%2==1) { flag=1; } n=n/2; } printf("%d\n",32-sum); } } return 0; } [Link 1]: http://211.69.26.100/problem.php?cid=1117&pid=1
还没有评论,来说两句吧...