Палиндромом назовем число, состоящее не менее чем из 2-х символов или цифр, одинаково читающееся как слева направо, так и наоборот. например, число «1221» является палиндромом, а число «1224» – нет. назовем палиндромом-1016 число, являющееся палиндромом в десятичном и шестнадцатеричном представлении. количество палиндромов-1016 среди первых десяти миллионов натуральных чисел составит…

Артём24532523 Артём24532523    2   22.07.2019 14:00    0

Ответы
Ксюша10092007 Ксюша10092007  03.10.2020 10:48
ответ: 22
Вариант на 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;
}
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика