写在最前面
本人为初学MATLAB编程的小菜鸟,本博客作为阶段的一个小练习,欢迎大家与我交流!
每周一句
快就是慢,慢就是快,当感到生活的无助时,此时正在上坡的路上;但当自己感觉活得很轻松时,可能已经在走下坡路了。保持积极的心态拥抱每一天,加油,早日成为一个大菜鸡!
题目八
题目的意思就是求这1000个数当中连续13位数相乘的最大值。
思路
刚开始看到一连串的数,有点懵逼。仔细想想,最重要的还是如何取出13位数并进行比较,直到找到最大值。我编写的程序第一步将1000个数当成字符串来处理,主要是因为这样做可以避免因为值过大而无法表示出来;第二步是从1-(1000-12),每次取出13个数,并将13个数做乘积,我觉得这是程序最难的部分。可以采用A=a(i:(i+12))每次取13个字符,通过B=str2num(A(:))'将字符串转变为数组(Ps:这一步操作的原因可以理解为:A(:)将一行字符串变成一列字符串,再通过str2num变成一列的数组,通过’转置成为一行数组),再通过prod(B)就可以得出五个元素的乘积。最后,一直比较下去就可以得到最大值。
代码块
disp('求1000个数中13位连续数乘积的最大值:')
clear; %将一串很长的字符串分行书写的方法a=[''...''...]
a=['73167176531330624919225119674426574742355349194934'...
'96983520312774506326239578318016984801869478851843'...
'85861560789112949495459501737958331952853208805511'...
'12540698747158523863050715693290963295227443043557'...
'66896648950445244523161731856403098711121722383113'...
'62229893423380308135336276614282806444486645238749'...
'30358907296290491560440772390713810515859307960866'...
'70172427121883998797908792274921901699720888093776'...
'65727333001053367881220235421809751254540594752243'...
'52584907711670556013604839586446706324415722155397'...
'53697817977846174064955149290862569321978468622482'...
'83972241375657056057490261407972968652414535100474'...
'82166370484403199890008895243450658541227588666881'...
'16427171479924442928230863465674813919123162824586'...
'17866458359124566529476545682848912883142607690042'...
'24219022671055626321111109370544217506941658960408'...
'07198403850962455444362981230987879927244284909188'...
'84580156166097919133875499200524063689912560717606'...
'05886116467109405077541002256983155200055935729725'...
'71636269561882670428252483600823257530420752963450']
t=1;
max=1;
%%b=a(m:n)用于提取字符串中m到n位的字符串
for i=1:1000-12 %从字符串的第一个数到1000-12
m=a(i:(i+12)); %取出13位字符串
s=m(:); %将字符串排成一列
n=str2num(s)'; %该语句的作用是将字符串转换为数组
t=prod(n); %数l组的各元素求乘积
if t>max
max=t;
end
end
fprintf('输出最大的13位连续数的乘积:%d\n',max);
结果
输出最大的13位连续数的乘积:23514624000
最后,欢迎大家对我所写的的代码进行批评指正,一起交流!