Нахождение шестизначного числа палиндрома. Работает для четырех и пяти цифр

Мне нужно найти числа-палиндромы, которые являются произведением трехзначных чисел. Программа, которую я сделал, работает для 2 * 2 и 3 * 2. Но не для 3 * 3. Почему? Я не могу понять.

#initialized variables

x = 999             
y = 999


 while x > 100

    while y > 100

        num = x*y

        #Reversing the digits

        a = num/100000
        b = num%100000
        c = b/10000
        d = b%10000
        e = d/1000
        f = d%1000
        g = f/100
        h = f%100
        i = h/10
        j = h%10
        rev = 100000*j+10000*i+1000*g+100*e+10*c+a

        #Checking for palindrome

        if rev == num
            puts num
        end
        y -= 1

    end
    x -= 1  

end

person Pr4njal    schedule 18.11.2015    source источник


Ответы (2)


Вы не сбрасываете y на 999 после каждой итерации x, поэтому ваша программа фактически не выполняет итерацию по всему диапазону значений, как предполагалось. Поднимите y = 999 до чуть менее while x > 100.

person Brad Nauta    schedule 18.11.2015
comment
@ Pr4njal, пожалуйста, примите мой ответ, если вы считаете, что я решил вашу проблему, спасибо! - person Brad Nauta; 19.11.2015
comment
Эта единственная строчка, которую мне не хватало ... Это меня расстраивало на два дня ... Спасибо тебе ... - person Pr4njal; 19.11.2015

Что ж, ваш код довольно прост, за исключением того, что вы меняете цифры.

Я бы рекомендовал два шага, чтобы решить эту проблему:

  1. Выделите обратную часть в отдельную функцию и напишите кучу модульных тестов, чтобы убедиться, что она делает то, что вы думаете. Моя интуиция подсказывает, что это не так.
  2. Если это не поможет, начните писать тесты для всего этого. На самом деле, вам, вероятно, все равно стоит это сделать.
person Morgen    schedule 18.11.2015