题解 UVA10931 【Parity】
本题不需要数组,只需要一个递归,边输出边统计1的个数
其实本题是位运算模板题,通过每次右移并且进行逻辑与运算就可得出1的个数。因为短除法是要从后往前输出,我们就利用递归输出,并且在递归时顺便进行统计。
做完本题的可以去做
代码:
#include <iostream>
using namespace std;
int cnt = 0;
void func(int& n)
{
bool a = n & 1;
if(a)
{
cnt++;
}
n >>= 1;
if(n)
{
func(n);
}
cout << a;
}
int main()
{
ios::sync_with_stdio(false);
int x;
while(cin >> x && x)
{
cnt = 0;
cout << "The parity of ";
func(x);
cout << " is " << cnt << " (mod 2).\n";
}
return 0;
}
知识点:
位运算
1、<<
"<<"左移符号用于将n的二进制每一位往左移,末尾用0补足
2、>>
">>"右移符号用于将n的二进制每一位往右移,最右边的一位消失
注意n右移的结果必定是正整数,也就是说这里的除法相当于自动下取整
3、&
a & b的返回值是将a与b的二进制进行按位与运算,按位与就是都为1为1,不然为0
例如a和b的二进制分别为10101与10011
那么:
10101
10011
10001
每一位按位与
a & b = 10001
如果a的位数或b的位数不够,用0补足
4、|
a | b的返回值是将a与b的二进制进行按位或运算,按位或就是其中一个为1就为1,两个都为0为0
如果a的位数或b的位数不够,用0补足
例如a和b的二进制分别为10101与10011
那么:
10101
10011
10111
每一位按位或
a | b = 10111
分类:
题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现