当我尝试解决欧拉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代表2位数为1000的301位数字)
当我运行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
函数需要符号数学工具箱。
答案 0 :(得分:1)
一种解决方案是使用符号工具。例如,要找到2^1000
上10
的其余部分的真实值,您可以像下面这样进行操作:
x = sym('2^1000');
reminder = fix(double(mod(x,10)))
答案是:
reminder =
6
对于100
和1000
分别是67
和376
。