查看: 134|回复: 2|关注: 0
打印 上一主题 下一主题

[已解决] 关于2^1000计算并求每一位数的和

[复制链接]

新手

7 麦片

财富积分


050


2

主题

13

帖子

0

最佳答案
本帖最后由 学习者最好 于 2019-9-19 15:56 编辑

在做欧拉计划第16题,题目要求求出2^1000,然后把每一位数相加求和。
我自己的解决思路是如下:对每一位数求余数,然后再相加,代码如下

  1. clc,clear,close all
  2. t = 2^1000;
  3. t1 = t;
  4. n = floor(log10(t))+1;
  5. m = 1;
  6. for i = 1:n
  7. ? ? x(m) = rem(t1,10);
  8. ? ? t1 = floor(t1/10);??
  9. ? ? m = m+1;? ?? ?? ?
  10. end
  11. sum(x)
复制代码


最后的计算结果是1189,但是正确答案是1366。经过初步尝试,当幂次小于50(2^50)时,该程序能求得正确答案,但是再大,就会出现错误。请问造成这样的原因是什么?谢谢


论坛优秀回答者

权威

3783 麦片

财富积分



3

主题

3962

帖子

845

最佳答案
  • 关注者: 178
2#
发表于 5?天前 | 只看该作者 |此回复为最佳答案
浮点误差,用符号算法。
  1. a=sym(2)^1000;
  2. b=sum(str2num(char(a)'))
复制代码

b =1366

新手

7 麦片

财富积分


050


2

主题

13

帖子

0

最佳答案
3#
?楼主| 发表于 5?天前 | 只看该作者
本帖最后由 学习者最好 于 2019-9-19 19:29 编辑
maple1314168 发表于 2019-9-19 17:59
浮点误差,用符号算法。

b =1366

十分感谢。
另外,请问matlab在什么范围内,就需要用符号算法了?
因为最近才使用,不是太懂,怕以后也遇见这种情况。谢谢回复

========================分割线========================
这个问题的答案已经通过翻阅论坛的相关资料得以解决,地址在下面
https://www.ilovematlab.cn/thread-242321-1-1.html

在此感谢楼上朋友的回答。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表