SkypeMeSM
SkypeMeSM

Reputation: 3287

Concatenate two integers

What is the best way to concatenate two integers to an integer in Fortran?

integer a = 999
integer b = 1111

integer c should be 9991111

Thanks, SM.

Upvotes: 3

Views: 6195

Answers (3)

milancurcic
milancurcic

Reputation: 6241

Here is an example code that does what you need. It writes integers into character strings, trims and concatenetes them, and then reads the result integer from concatenated character string:

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: Note that this example is general for any integer lengths, assuming they fit into their respective kind (no integer overflow).

Upvotes: 8

steabert
steabert

Reputation: 6878

You can use the information of the order of the number:

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

integer :: c

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

write(*,*) c

Upvotes: 3

Chris
Chris

Reputation: 46316

Your best bet is to use internal files to convert your two integers to a character, and then convert this back to an integer.

There is no intrinsic procedure for converting a numeric value to a character/string representation. See this discusson on Fortran Wiki for more information (see the part headed "Note").

As an example, in your case you could use the following:

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

You will have to change the format string if you want different widths of the character representation of your integers.

Upvotes: 0

Related Questions