第三题70,暴力搜索
/*
时间限制:C/C++语言 2000MS;其他语言 4000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
回文串是无论正着读还是反着读都一样的字符串,比如“level”或者“noon”就是回文串。

若将某个十进制非负整数N,转换成二进制后得到的 01 序列具有回文串的性质,则称该数为回文数,比如十进制非负整数 9 表示成二进制后得到 1001,“1001”具有回文串的性质,则称十进制整数 9 为回文数。

现给你一个十进制整数N,请计算小于等于N的回文数的数量。

输入
第一行包含一个整数N, 1 ≤N≤1018。

输出
输出一个整数M,表示小于等于 N 的回文数的数量

样例输入
6

样例输出
4


提示
Input Sample
10
Output Sample
6
*/


#include<iostream>
#include <vector>
using namespace std;
typedef long long LL;
int isHuiWen(LL n)
{
    vector<LL> temp;
    while (n)
    {
        if (n%2==0)
        {
            temp.push_back(0);
            n /= 2;
        }
        if (n%2==1)
        {
            temp.push_back(1);
            n /= 2;
        }
    }
    int len = temp.size();
    if (len==1)
    {
        return 1;
    }
    int i = 0;
    int j = len - 1;
    while (i<j)
    {
        if (temp[i]==temp[j])
        {
            i++;
            j--;
        }
        else
        {
            return -1;
        }
    }
    return 1;
}

int main()
{
    LL n;
    cin >> n;
    int cnt = 0;
    for (LL i = 0; i <= n; i++)
    {
        if (isHuiWen(i)==1)
        {
            cnt++;
        }
    }
    cout << cnt << endl;
    return (0);
}