2012-02-01 48 views
3

在Fortran中將兩個整數連接爲整數的最佳方法是什麼?連接兩個整數

integer a = 999 
integer b = 1111 

integer c應該9991111

感謝, SM。

回答

8

下面是一個示例代碼,它可以滿足您的需求。它寫出整數成字符串,修剪和concatenetes它們,然後讀取串聯字符串結果整數

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 

編輯:請注意,這個例子是通用的任何整數長度,假設他們融入各自kind (沒有整數溢出)。

0

最好的辦法是用internal files將你的兩個整數轉換成一個字符,然後將其轉換回整數。

沒有將數值轉換爲字符/字符串表示的內在過程。有關更多信息,請參閱Fortran Wiki上的this討論(請參閱「註釋」部分)。

舉個例子,你的情況,你可以使用以下命令:

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 

你將不得不如果你希望你的整數的字符表示的不同寬度改變格式字符串。

+0

線「寫(C,*)溫度」不做你的想法。它會將溫度寫入具有整數c值的I/O單元,而不是寫入c本身。相反,你需要從temp讀取c。 – milancurcic 2012-02-01 16:54:20

+0

這是我的錯字 - 從上面的行復制和粘貼。感謝您指出。 – Chris 2012-02-01 16:56:50

+0

沒問題。出於好奇,我嘗試了ifort,pgf90和gfortran的代碼。奇怪的是,ifort12似乎將temp寫入整數c並打印出來,這不是預期/期望的行爲。 pgf90和gfortran按預期運行,生成fort.gibberish文件作爲輸出。 – milancurcic 2012-02-01 17:00:06

2

可以使用的順序號的信息:

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

integer :: c 

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

write(*,*) c