我正在用FORTRAN做一个程序,这有点特殊。我只能使用整数变量,并且如您所知,当您尝试计算优于12或13的阶乘时,会发生内存溢出。因此,我编写了此程序来避免此问题:

http://lendricheolfiles.webs.com/codigo.txt

但是正在发生非常奇怪的事情。程序计算4或5次阶乘井,然后给出内存溢出消息。我使用的是Windows 8,我担心这可能是导致失败的原因,或者仅仅是因为我做错了什么。

谢谢。

最佳答案

M.S.B.的答案在于您的问题要点:数组索引在几个地方超出范围。

在三个循环中,cifra - 1 == 0超出范围:

do cifra=ncifras,1,-1
  factor(1,cifra-1) = factor(1,cifra)/10    ! factor is (1:2, 1:ncifras)
  factor(1,cifra) = mod(factor(1,cifra),10)
enddo
! :
! Same here:
do cifra=ncifras,1,-1
 factor(2,cifra-1) = factor(2,cifra)/10
 factor(2,cifra) = mod(factor(2,cifra),10)
enddo
!:
do cifra=ncifras,1,-1
  sumaprovisional(cifra-1) = sumaprovisional(cifra-1)+(sumaprovisional(cifra)/10)
  sumaprovisional(cifra) = mod(sumaprovisional(cifra),10)
enddo


在下一种情况下,cifra - (fila - 1)的值超出范围:

do fila=1,nfilas
  do cifra=1,ncifras
    ! Out of bounds for all cifra < fila:
    sumando(fila,cifra-(fila-1)) = factor(1,cifra)*factor(2,ncifras-(fila-1))
  enddo
  sumaprovisional = sumaprovisional+sumando(fila,:)
enddo


如果将前三个循环重写为do cifra = ncifras, 2, -1,将其他情况的内部循环重写为do cifra = fila, ncifras,则应该没问题。同样,在发布的示例程序中,首先必须正确分配resultado,然后再将其传递给子例程。

10-07 21:03