MATLAB--190828--欧拉计划(八)

写在最前面
本人为初学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
最后,欢迎大家对我所写的的代码进行批评指正,一起交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

摸鱼王子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值