Tính chẵn lẻ Cho số nguyên không dấu N. Trong bài toán này tính chẵn lẻ của N là số bít 1 có trong biểu diễn nhị phân của N. Nghĩa là nếu trong biểu diễn nhị phân của N số lượng bít 1 là số chẵn thì N coi là có tính chẵn, ngược lại N là số lẻ. Vd: N=13_{10} =1101_{2}N=13 10 ​ =1101 2 ​ có tính lẻ N=9_{10}=1001_{2}N=9 10 ​ =1001 2 ​ có tính chẵn Mô tả đầu vào Dòng đầu tiên ghi số nguyên T là số bộ test T dòng tiếp theo mỗi dòng ghi số nguyên N cần kiểm tra tính chẵn lẻ Ràng buộc 1\leq T \leq 500; 0\leq N \leq 10^{12}1≤T≤500;0≤N≤10 12 Mô tả đầu ra Gồm T dòng, mỗi dòng ghi ra: odd nếu N có tính lẻ even nếu N có tính chẵn C++ ạ

2 câu trả lời

#include <bits/stdc++.h>
#define int long long
#define Nmax 100007
#define fi first
#define se second

using namespace std;
int n,k;
int s=0,d=0;
int32_t main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    if (fopen("Parity.inp", "r"))
    {
        freopen("Parity.inp","r",stdin);
        freopen("Parity.out","w",stdout);
    }
    cin>>k;
    while(k--)
    {
        d=0;
        s=0;
        cin>>n;
        while(n>0)
        {
            if ( n%2==1)
                d++;
            s=s*10+n%2;
            n/=2;
        }
        if ( d%2==0)
            cout<<"even"<<endl;
        else
            cout<<"odd"<<endl;
    }
}

code ac nhe b

#include <bits/stdc++.h>

using namespace std;
long long t,n[100001],s[1001][1001],dem[100001];
int main()
{
    cin>>t;
    for(int i=1;i<=t;i++)
    {
        int v=0;
        dem[i]=0;
        cin>>n[i];
        while(n[i]>0)
        {
            v++;
            s[i][v]=n[i]%2;
            n[i]=n[i]/2;
        }
        for(int j=v;j>=1;j--)
        {
            if(s[i][j]==1) dem[i]++;
        }
    }
    for(int i=1;i<=t;i++)
    {
        if(dem[i]%2==0) cout<<"even"<<endl;
        else cout<<"odd"<<endl;
    }
    return 0;
}