欧拉计划第36题
作者:
brivia
,
2024-02-25 18:22:54
,
所有人可见
,
阅读 36
/*
欧拉计划第36题
小于1000000的自然数中, 10进制和2进制下均为回文,数字没有前导0.
*/
#include<bits/stdc++.h>
using namespace std;
string tran(int n, int base)
{
// 10 进制的数 n, 转换成 base 进制的字符串
string ans;
while (n)
{
if (n % base) ans += '1';
else ans += '0';
n /= base;
}
reverse(ans.begin(), ans.end());
return ans;
}
bool check(int n)
{
// 10 进制下
if (n % 10 == 0) return false; // 末尾为0
string a = to_string(n);
string b = a;
reverse(a.begin(), a.end());
if (a != b) return false;
// 2 进制下
if (n % 2 == 0) return false; // 末尾为0
string c = tran(n, 2);
string d = c;
reverse(c.begin(), c.end());
if (c != d) return false;
return true;
}
int main(void)
{
int sum = 0;
for (int i = 1; i < 1000000; ++ i)
if (check(i)) sum += i;
cout << sum << endl;
return 0;
}