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