Другие языки программирования и технологии

Числа - палиндромы

QBasic
Палиндромы - строки, читающиеся как слева направо, так и справо налево (одинаково). Нужно создать массив, в который надо вписать числа-палиндромы и пронумеровать их (номер ячейки массива=номер палиндрома). Как создать эти числа палиндромы?
Проще всего будет запустить цикл от 0 до N, каждое число которого
перестанавливать в зеркальное отображение (Например 1234 сделать 4321)
если оба числа одинаковы, то это палиндром.
На C++ функция разворота числа будет выглядеть так:
int reverse(int x){
 int n = x;
 x = 0;
 do{
  x = x * 10 + (n % 10);
  n = n / 10;
 } while (n > 0);
 return x;
}

На Pascal так:
function reverse(x: integer): integer;
var
 i: integer;
begin
 i := x;
 x := 0;
 repeat
  x := x * 10 + (i mod 10);
  i := i div 10;
 until i <= 0;
 Result := x;
end;

На бейсик уж переведёшь как-нибудь.
Хайдар Пулатов
Хайдар Пулатов
52 992
Лучший ответ
Их бесконечно много! Хоть на каком промежутке? Или может в известном массиве найти палиндромы?
Их, очевидно, бесконечно много с точки зрения математики. Просто у нас размер числа ограничен и это надо учитывать. А какой он у вас - в вашем задании не написано (может, байт, а может, 64-битное машинное слово) .
Алгоритм примерно такой, если мы взяли в качестве первой цифры A, то и последняя цифра автоматически A, и т. д.
Andrei Z
Andrei Z
54 366
Если заранее известна длина, то всё просто.

Предположим, что длина = 5
Тогда нужно 3 вложенных цикла:
i = 1…9 (j = 0…9 (k = 0…9))

i, j, k - цифры с которых начинается число
цикл по i начинается с 1, так как i - первая цифра, и если она = 0, то длина будет меньше.

Число вычисляется внутри циклов
N = i*10001 + j*01010 + k*00100
Я специально оставил ведущие 0.

Всего таких чисел 9*10*10 = 900
Сквозной индекс в массиве (начинается с 0)
index = (i-1)*100+j*10+k

Если нужна какая-то другая длина, циклов будет другое количество, но идея та же.
Лёха Кузменко
Лёха Кузменко
11 112

Похожие вопросы