#B3. 函数与位运算题解
函数与位运算题解
A1150 求正整数2和n之间的完全数
题意
完全数的定义:真因子之和等于本身的正整数。
求正整数2和n之间的完全数(一行一个数)。
完全数:因子之和等于它本身的自然数,如6=1+2+3
题解
编写函数,求当前数是否为完全数。
遍历2-n,如果当前数是完全数,则ans++。
A1151 素数个数
题意
编程求2~n(n为大于2的正整数)中有多少个素数。
题解
编写函数,求当前数是否为素数。
遍历2-n,如果当前数是素数,则ans++。
A1155 回文三位数
题意
如果一个数从左边读和从右边读都是同一个数,就称为回文数。例如6886就是一个回文数,求出所有的既是回文数又是素数的三位数。
题解
编写函数,求当前数是否为素数。
编写函数,求当前数是否为回文数。
遍历100-999,如果当前数是素数和回文数,则输出。
A1157 哥德巴赫猜想
题意
哥德巴赫猜想的命题之一是:大于6 的偶数等于两个素数之和。编程将6~100所有偶数表示成两个素数之和。
题解
编写函数,求当前数是否为素数。
遍历6-100之间的偶数,拆成两个数,判断这两个数是不是素数,是则输出。
P8072 [COCI2009-2010#7] COKOLADA
题意
需要巧克力大小为K,只能购买2的幂的巧克力,切割也只能对半切,问需购买巧克力大小的最小值和最小切割次数。
题解
需购买巧克力大小的最小值为。最小切割次数为,即。
P1100 高低位交换
题意
二进制数的前16 位为“高位”,后16 位为“低位”。输出高低位交换后的数。
题解
方法1:位运算求解。
unsigned int n;
cout << (n >> 16) | (n << 16);
方法2:指针求解。注意存储方式为小端字节序,因此二进制数的高字节存放到内存的高地址,即假设前16位存放在A地址,则后16位存放在A-1地址。所以指针指向该二进制数,是指向后16位。
unsigned int s;
cin >> s;
unsigned short *p = (unsigned short *)&s;
unsigned int n = (*p) << 16;
p++;
n += (*p);
cout << n;