根據提示

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;
}

arrow
arrow
    全站熱搜

    大神(偽) 發表在 痞客邦 留言(0) 人氣()