Объединить два целых числа - PullRequest
3 голосов
/ 01 февраля 2012

Каков наилучший способ объединить два целых числа в целое число в Фортране?

integer a = 999
integer b = 1111

integer c должно быть 9991111

Спасибо, SM.

Ответы [ 3 ]

8 голосов
/ 01 февраля 2012

Вот пример кода, который делает то, что вам нужно. Он записывает целые числа в символьные строки, обрезает и конкатенирует их, а затем считывает результирующее целое число из объединенной символьной строки:

integer :: a,b,c
character(len=99) :: char_a,char_b,char_c

a = 999
b = 1111

write(unit=char_a,fmt=*)a
write(unit=char_b,fmt=*)b

char_c = trim(adjustl(char_a))//trim(adjustl(char_b))

read(unit=char_c,fmt=*)c

print*,c

end

Edit: обратите внимание, что этот пример является общим для любых целочисленных длин, при условии, что они вписываются в их соответствующие kind (без целочисленного переполнения).

2 голосов
/ 01 февраля 2012

Вы можете использовать информацию порядка номера:

integer :: a = 999
integer :: b = 1111

integer :: c

c = a * 10**(ceiling(log10(real(b)))) + b

write(*,*) c
0 голосов
/ 01 февраля 2012

Лучше всего использовать внутренние файлы , чтобы преобразовать два целых числа в символ, а затем преобразовать их обратно в целое число.

Не существует встроенной процедуры для преобразования числового значения в символьное / строковое представление. См. это обсуждение на Фортран Вики для получения дополнительной информации (см. Часть, озаглавленную «Примечание»).

Например, в вашем случае вы можете использовать следующее:

program test_conversion
  implicit none

  integer :: a=999
  integer :: b=1111
  integer :: c

  character(len=7) :: temp

  write(temp, '(i3.3, i4.4)') a, b ! You may need to change these format specifiers

  read(temp, *) c

  print*, c ! This prints 9991111

end program test_conversion

Вам придется изменить строку формата, если вы хотите различную ширину символьного представления ваших целых чисел.

...