根據提示
n 在 2 進位判別 3 的倍數,相當於二進位時的 | 奇數位和 - 偶數位和 | 是否為 3 的倍數
例如 n = 2147483607 是否為 3 的倍數 ?
base2(2147483607) = 01111111111111111111111111010111 => | 奇數位和 - 偶數位和 | = 3
則相當於問 n = 3
base2(3) = 11 => | 奇數位和 - 偶數位和 | = 0
0 是 3 的倍數,所以 YES
如果最 1 或 2 則不是
#include <iostream>
#include <bitset>
using namespace std;
int main()
{
int n = 0;
while (cin >> n){
int digit_sum = n;
while(digit_sum > 1){
bitset<32> base2(digit_sum);
int odd = 0, even = 0;
for (int i=0; i<32; i+=1)
i%2 ? odd += base2[i] : even += base2[i];
digit_sum = odd > even ? odd - even : even - odd;
}
if(digit_sum)
cout << "NO" << endl;
else
cout << "YES" << endl;
}
return 0;
}
留言列表