#include <iostream>
#include <fstream>
using namespace std;

fstream dane, wynik;

string naBin(int a)
{
    string pom;
    while(a>0)
    {
        pom+=a%2+48;
        a=a/2;
    }
    string axa;
    for(int i=0; i<pom.length(); i++)
    {
        axa+=pom[pom.length()-i-1];
    }
    return axa;
}

bool czyPalindrom(string a)
{
    for(int i=0; i<a.length()/2; i++)
    {
        if(a[i]!=a[a.length()-1-i])
            return false;
    }
    return true;
}

bool czyPrawiePalindrom(string a)
{
    int pomoc=a.length()-1;
    int pomoc2=0;
    while(a[pomoc]=='0')
    {
        pomoc2++;
        pomoc--;
    }
    string pom;
    for(int i=0; i<pomoc2; i++)
    {
        pom+='0';
    }
    for(int i=0; i<a.length(); i++)
    {
        pom+=a[i];
    }

    for(int i=0; i<pom.length()/2; i++)
    {
        if(pom[i]!=pom[pom.length()-1-i])
            return false;
    }
    return true;
}

void wyswietlASCII()
{
    for(int i=0; i<256; i++)
    {
        char ascii=i;
        cout<<i<<".\t"<<ascii<<endl;
    }
}

int main()
{
    dane.open("../../cke2021/Dane_PR2s/PR2s/dane.txt", ios::in);
    wynik.open("wyniki4_2.txt", ios::out);
    int pdpnkt2=0;
    int pdpnkt2prawie=0;
    for(int i=0; i<5000; i++)
    {
        int liczba;
        dane>>liczba;
        if(czyPalindrom(naBin(liczba)))
            pdpnkt2++;
        if(czyPrawiePalindrom(naBin(liczba))&&!czyPalindrom(naBin(liczba)))
            pdpnkt2prawie++;
    }

    wynik<<pdpnkt2+pdpnkt2prawie;
    return 0;
}
