program main implicit none integer :: i do i = -11, 10 print*, 'digit:',digit(i),', str:','__'//str(i)//'__' enddo contains !============================================================== ! 4バイト整数の桁数を求める純粋関数 !============================================================== pure function digit(i) result(d) implicit none integer, intent(in) :: i integer :: d selectcase( i ) case( :-1 ) d = int(log10(real(-i))+1)+1 case( 0 ) d = 1 case( 1: ) d = int(log10(real(i))+1) endselect end function digit !============================================================== ! 整数を桁数分の長さをもつ文字変数に変換する関数 ! 文字変数'c'の宣言に関数'digit'を用いている !============================================================== function str(i) result(c) implicit none integer, intent(in) :: i character(digit(i)) :: c write(c,"(i0)") i end function str !============================================================== ! !============================================================== end program main