第三题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);
}