Вопрос возник у меня, когда я пытался решить Project Euler # 16.
Проблема гласит:
2 15 = 32768 и суммаиз его цифр 3 + 2 + 7 + 6 + 8 = 26.
Какова сумма цифр числа 2 1000 ?
Я пытался справиться с этим с MATLAB.Вот мой код:
function [sum] = power_digit_sum_p16(pow)
sum = 0;
n = 2 ^ pow;
M = zeros(1,301);
for i = 301 : -1 : 0
a = floor(n / 10 ^ i);
M(302 - i) = a;
sum = sum + a;
n = n - 10 ^ i * a;
end
end
(где 301 обозначает 301 цифру 2 ^ 1000)
Когда я набрал pow_digit_sum_p16(1000)
, MATLAB вернул 1285, что неверно.
Затем я проверил номер, предоставленный MATLAB, который хранится в матрице M
, когда узнал, что что-то не так.
Последняя цифра 2 ^ 1000 должна быть 6 вместо 2 (этоследует шаблону 2-4-8-6-2-4-8-6)! Я не понимаю, что здесь происходит с MATLAB, но я думаю, что проблема возникла из-за слишком большого числа, так как моя функция работает нормальнокогда pow
мало.
Мой друг предоставил мне решение Python, и кажется, что Python хорошо справляется с большим числом.Ниже приведен код на Python:
x=2**1000
ans=0
while x>0:
ans+=(x%10)
x=x//10
print(ans)
Обновление: благодаря ответу OmG я немного изменил свой код:
function [sum] = power_digit_sum_p16(pow)
sum = 0;
n = 2 ^ pow;
n = sym(n); % This line is new!
M = zeros(1,301);
for i = 301 : -1 : 0
a = floor(n / (10 ^ i));
M(302 - i) = a;
sum = sum + a;
n = n - (10 ^ i) * a;
end
end
И я получил то, что ожидал.Обратите внимание, что для функции sym
требуется набор инструментов Symbolic Math.