FORTRAN 90将整数中的数字分开

时间:2014-07-09 17:47:33

标签: fortran90

Hej伙计们,我是编程的初学者,但是我读了我的stackoverflow页面的份额,并且搜索了一下,如果在FORTRAN 90中甚至可以进行以下操作,仍然无法确定。< / p>

我试图隔离整数中的数字,指出障碍的位置,请考虑以下想法:

INTEGER :: n,mult,add

READ *,n! n = 8

mult = n * 2! = 16

add = ??? !我要添加1 + 6

的地方

2 个答案:

答案 0 :(得分:2)

另一种方式,我相信这对于阅读代码的人来说是显而易见的:

  INTEGER FUNCTION sum_digits(num)
    INTEGER, INTENT(in) :: num
    INTEGER, DIMENSION(:), ALLOCATABLE :: digs
    INTEGER :: num_digits, ix, rem

    num_digits = FLOOR(LOG10(REAL(num))+1)
    ALLOCATE(digs(num_digits))

    rem = num
    DO ix = 1, num_digits
       digs(ix) = rem - (rem/10)*10  ! Take advantage of integer division
       rem = rem/10
    END DO

    sum_digits = SUM(digs)

  END FUNCTION sum_digits

我已经对它进行了一系列明显的测试,它已经通过了所有4个测试。如果您发现一个不起作用的案例,请修复它。如果您想要返回的数字数组,请修改该函数以返回该数字。如果你想让它适用于负整数,那么也可以将ABS()放在适当的位置。

答案 1 :(得分:0)

拉出'ith'位数的一种方法是:

 n/10**i-10*(n/10**(i+1))

所以你的例子:

      n-10*(n/10)  +   n/10-10*(n/100)