В этом примере показано, как работать с большими целыми числами и их десятичным представлением с помощью Symbolic Math 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
Делает алгоритм, оконечный для каждого ?
Проблема все еще открыта, и поклонники палиндрома инвестировали много лет центрального процессора в случай, который дал проблеме его имя. Для того, чтобы вопроизвести с этой проблемой в 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