COJ 1059 - Numeric Parity 位操作

本文介绍了一种计算整数奇偶性的方法,通过分析整数的二进制表示来确定其奇偶性,并提供了两种实现方式:一种是利用bitset容器,另一种是通过自制的位操作函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很好玩的一道题,可以熟悉下位操作实现和玩一玩bitset这个容器

Description

We define the parity of an integerNas the sum of the bits in binary representation computed modulo two. As an example, the number 21 = 10101 has three 1s in its binary representation so it has parity 3 (mod 2), or 1. In this problem you have to calculate the parity of an integer1 <= I <= 2147483647 (2^31-1). Then, let start to work...

Input specification

Each line of the input has an integerIand the end of the input is indicated by a line whereI = 0that should not be processed.

Output specification

For each integerIin the input you should print one line in the form "The parity of B is P (mod 2)." whereBis the binary representation ofI.

Sample input
1
2
10
21
0
Sample output
The parity of 1 is 1 (mod 2).
The parity of 10 is 1 (mod 2).
The parity of 1010 is 2 (mod 2).
The parity of 10101 is 3 (mod 2).

使用bitset来实现,注意bitset的高低为存储顺序,是底位到高位,索引i右0到大的:

void NumericParity()
{
	int n = 0;
	bitset<32> bi;
	while (cin>>n && n)
	{
		bi = n;		
		cout<<"The parity of ";
		bool flag = false;
		for (int i = bi.size() - 1; i >= 0 ; i--)
		{
			flag |= bi.test(i);
			if (flag) cout<<bi[i];
		}		
		cout<<" is "<<bi.count()<<" (mod 2).\n";
	}
}

自家自制的位操作:

static bool biNum[32];

int intTobi(int n)
{
	int i = 0, c = 0;
	while (n)
	{
		c += n % 2;
		biNum[i++] = n % 2;
		n >>= 1;
	}
	return c;
}

void NumericParity2()
{
	int n = 0;
	while (cin>>n && n)
	{
		fill(biNum, biNum+32, false);
		cout<<"The parity of ";
		int c = intTobi(n);
		bool flag = false;
		for (int i = 31; i >= 0 ; i--)
		{
			flag |= biNum[i];
			if (flag) cout<<biNum[i];
		}		
		cout<<" is "<<c<<" (mod 2).\n";
	}
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值