Этот пример показывает, как работать с большими целыми числами и их десятичным представлением с помощью Toolbox™ Symbolic Math.
Символьная строка называется палиндромом, если она та же самая при чтении назад. Положительное целое число называется палиндромом, если его десятичное представление является палиндромом. Для примера 191, 313 и 5885 все являются палиндромами.
Примите во внимание следующий алгоритм
Начните с любого положительного целого числа и добавить его к зеркальному изображению.
Повторите этот шаг с получившимся числом до тех пор, пока вы не получите палиндром.
Например, предположим N = 89; затем первые 3 итерации дают ...
В конце концов после 24 итераций вы прибудете в палиндром 8813200023188.
N = sym(89); for k=0:100 s1 = char(N); s2 = fliplr(s1); if strcmp(s1, s2) disp(['Finished in iteration ' num2str(k)]) break end N = N + sym(s2); disp(N) end
Finished in iteration 24
Завершает ли алгоритм для каждого ?
Проблема все еще открыта, и palindrome aficionados вложили много центральных процессоров лет в случай, который дал проблеме ее имя. В порядок играть с этой проблемой в MATLAB™, символические целые числа полезны, потому что их размер неограниченен. Используйте функцию sym
для преобразования строк десятичных цифр в символьные целые числа и char
(не num2str
!) для преобразования назад.
Исследование знаменитого чехол производит действительно огромные числа. Чтобы увидеть, сколько десятичных цифр имеет целое число, просто используйте log10
:
N = sym(196); for k=0:1000 s1 = char(N); s2 = fliplr(s1); N = N + sym(s2); end disp(['Number of digits after ' num2str(k) ' iterations: ' char(ceil(log10(N)))]);
Number of digits after 1000 iterations: 411