我正在用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
,然后再将其传递给子例程。