В этом примере показано, как работать с большими целыми числами и их десятичным представлением с помощью символьного математического Toolbox™.

Строка символов называется палиндромом, если она одинакова при обратном чтении. Положительное целое число называется палиндромом, если его десятичное представление является палиндромом. Например, 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 вложили много лет CPU в дело N = 196, которое дало проблеме свое название. Для того, чтобы играть с этой проблемой в MATLAB™, символические целые числа полезны, потому что их размер неограничен. Используйте функциюsym для преобразования строк десятичных цифр в символьные целые числа, и char (не num2str !) для обратного преобразования.
Расследование знаменитого дела N = 196 производит поистине огромные цифры. Чтобы узнать, сколько десятичных цифр имеет целое число, просто используйте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