class Integer < Value

  int as_char()
    if_plus( self - 9)
      return 32
    else
      return 48 + self
    end
  end



  int div10_typed()
    int tmp = self >> 1
    int q = self >> 2
    q = q + tmp
    tmp = q >> 4
    q = q + tmp
    tmp = q >> 8
    q = q + tmp
    tmp = q >> 16
    q = q + tmp
    q = q >> 3
    int r = q * 10
    r = self - r
    r = r + 6
    r = r >> 4
    return q + r
  end

  Word as_string(Word str)
    if_minus( self - 10 )
      int num = as_char()
      str = str.push_char( num )
    else
      int rest = self.div10()
      str = rest.as_string( str )
      rest = rest * 10
      rest = self - rest
      str = rest.as_string(str)
    end
    return str
  end

  Word to_s()
    Word start = " "
    start.set_length(0)
    return as_string( start )
  end

  int puti()
    Word str = self.to_s()
    str.putstring()
    return self
  end

  int div4()
    return self & 3
  end

  int fibr( )
    if_plus( self - 2 )
      int tmp
      tmp = self - 1
      int a = tmp.fibr( )
      tmp = self - 2
      int b = tmp.fibr( )
      return a + b
    else
      return self
    end
  end

  int fibw( )
    int result = 1
    int a = 0
    int b = 1
    int i = 2
    while_plus( self - i )
       result = a + b
       a = b
       b = result
       i = i + 1
    end
    return result
  end

end