Fortran Coder

查看: 17403|回复: 11
打印 上一主题 下一主题

[数值问题] 大数计算

[复制链接]

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

楼主
发表于 2014-3-5 09:50:35 | 显示全部楼层
可以考虑使用大数模块。

经过计算。100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
其各项相加为      648

[Fortran] 纯文本查看 复制代码
program www_fcode_cn
  use big_integer_module
  implicit none
  integer i
  type(big_integer) :: a
  integer :: sum , b
  a = 1
  do i=1,100
    a = a * i
    !if ( modulo(a,10)==0 ) a = a/10
    !// 上面一行添加后可减少位数
  end do
  sum=0
  call print_big (a)
  write(*,*)
  do while (a>0)
    b=modulo(a,10)
    a = a / 10
    sum=sum+b
  end do
  write(*,*) sum
end program www_fcode_cn


大数模块,在本站主站“代码”栏目中有提供

http://www.fcode.cn/code_gen-46-1.html

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

沙发
发表于 2014-3-6 09:50:50 | 显示全部楼层
jason388 发表于 2014-3-6 06:44
所谓“另一种求大数阶乘的算法”其实很简单:用数组a存储阶乘结果的每一位数字(a(0)存储阶乘结果的位数,a ...

嗯,算法原理是没有什么难点。
每一个 a 其实可以存储4个或者8个数字的,这就有点类似BCD码了。

而BCD码的计算或处理,则有很多现成的代码。

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

板凳
发表于 2014-3-18 14:57:51 | 显示全部楼层
pasuka 发表于 2014-3-18 14:21
lz不想用大数模块的话,还可以看看编译器是否支持四精度的浮点数

浮点数做不了的。四精度浮点可以表达到 100!,但是精度上只有16位有效数字。无法达到175位
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-8 07:32

Powered by Tencent X3.4

© 2013-2024 Tencent

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