这两天在看到这样一个问题。本来这个利用MATLAB的符号计算是相当easy,一句话即可搞定:
sum(char(sym('2^1000'))-'0') 结果是1366。但如果不用符号计算的话就需要些技巧了。
注意到大数可以用10的n次幂的多项式来表示,因此大数相乘对应的就是多项式乘积,也就是卷积。因此可以得到下面MATLAB代码:
a = num2str(2^50)-'0'; for k = 1:2 a = BigInteM(a,a); end b = a; for k = 1:2 b = BigInteM(b,b); end ab = BigInteM(a,b); sum(ab);
BigInteM的代码如下:
function c = BigInteM(a,b)%a,b为0-9整数数组c = conv(a,b);for k = length(c):-1:2 c(k-1) = c(k-1)+floor(c(k)/10); c(k) = mod(c(k),10);endtmp = num2str(c(1))-'0';c = [tmp,c(2:end)];