Палиндромом назовем число, состоящее не менее чем из 2-х символов или цифр, одинаково читающееся как слева направо, так и наоборот. например, число «1221» является палиндромом, а число «1224» – нет. назовем палиндромом-1016 число, являющееся палиндромом в десятичном и шестнадцатеричном представлении. количество палиндромов-1016 среди первых десяти миллионов натуральных чисел составит…
Вариант на C++, но программа долго выполняется; как оптимизировать, я пока не знаю.
#include <iostream>
#include <sstream>
#include <string>
int main()
{
int k = 0; //счетчик 1016палиндромов
for (int i = 16; i <= 10000000; i++)
{
int temp = i;
std::stringstream ss; //перевод 10чного числа в 16чную строку
ss << std::hex << temp;
std::string temp16(ss.str());
//проверяем, является ли 16чное число палиндромом
bool t16 = true;
int left_index = 0;
int right_index = temp16.size() - 1;
while (left_index < right_index)
if (temp16[left_index++] != temp16[right_index--])
t16 = false;
if (t16)
{
bool t10 = true;
std::ostringstream ost; //перевод 10чного числа в строку
ost << temp;
std::string temp10 = ost.str();
//проверяем, является ли 10чное число палиндромом
int left_index = 0;
int right_index = temp10.size() - 1;
while (left_index < right_index)
if (temp10[left_index++] != temp10[right_index--])
t10 = false;
if (t10)
k = k + 1;
}
}
std::cout << "Number of 1016-palindroms: " << k << std::endl;
return 0;
}