回 帖 发 新 帖 刷新版面

主题:急求题目

(4F8)H的二进制表示是(    )
我不仅要答案,还要过程,QB最不好的就是进制转换!

回复列表 (共6个回复)

沙发

数学:
    16^2(256)          16^1(16)       1        
       4                 f=15         8
  256*4+16*15+8=1272(10)
  1272=10011111000(2)

板凳

QBASIC的通用转换程序:
1 CLS
DIM t AS DOUBLE
INPUT n$, s
IF s < 2 OR s <> INT(s) OR s > 16 THEN 1
DATA 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
l = LEN(n$): DIM a(l): n$ = UCASE$(n$)
FOR i = 1 TO l
    m$ = MID$(n$, i, 1)
    f = 0
    FOR j = 1 TO s
        READ k$
        IF k$ = m$ THEN f = 1: EXIT FOR
    NEXT j: RESTORE
    IF f = 0 THEN PRINT "ERROR": END
    IF ASC(k$) > 57 THEN a(i) = ASC(k$) - 55 ELSE a(i) = VAL(k$)
NEXT i
r = 0: t = 0
FOR i = l TO 1 STEP -1
    t = t + a(i) * s ^ r: r = r + 1
NEXT i
2 INPUT p
IF p < 2 OR p <> INT(p) OR p > 16 THEN 2
DO UNTIL t = 0
  a$ = LTRIM$(STR$(t - INT(t / p) * p)) + a$
  t = INT(t / p)
LOOP
PRINT "("; n$; ")"; s; "= ( "; a$; " )"; p
END


3 楼

今天上午我有急事,所以来晚了,对不起!
(4F8)H=(10011111001)2
楼上的程序不完整,这里是可以包括小数的进制转换,不过有时会出现死循环.
1 CLS
DIM t AS DOUBLE
INPUT n$, s
IF s < 2 OR s <> INT(s) OR s > 16 THEN 1
DATA 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
d = INSTR(n$, ".")
IF d = 0 THEN l = LEN(n$): GOTO 3
DIM b(LEN(n$) - d): l = d - 1
3 DIM a(l): n$ = UCASE$(n$)
FOR i = 1 TO l
    m$ = MID$(n$, i, 1)
    f = 0
    FOR j = 1 TO s
        READ k$
        IF k$ = m$ THEN f = 1: EXIT FOR
    NEXT j: RESTORE
    IF f = 0 THEN PRINT "ERROR": END
    IF ASC(k$) > 57 THEN a(i) = ASC(k$) - 55 ELSE a(i) = VAL(k$)
NEXT i
IF d = 0 THEN 4
x = 0
FOR i = d + 1 TO LEN(n$)
    x = x + 1
    m$ = MID$(n$, i, 1)
    f = 0: RESTORE
    FOR j = 1 TO s
        READ k$
        IF k$ = m$ THEN f = 1: EXIT FOR
    NEXT j
    IF f = 0 THEN PRINT "ERROR!": END
    IF ASC(k$) > 57 THEN b(x) = ASC(k$) - 55 ELSE b(x) = VAL(k$)
NEXT i
4 t = 0: r = 0
FOR i = l TO 1 STEP -1
    t = t + a(i) * s ^ r: r = r + 1
NEXT i
IF d = 0 THEN 5
r = -1
FOR i = 1 TO x
    t = t + b(i) * s ^ r: r = r - 1
NEXT i
5 INPUT p
IF p < 2 OR p <> INT(p) OR p > 16 THEN 5
zs = INT(t)
DO UNTIL zs = 0
   a$ = LTRIM$(STR$(zs - INT(zs / p) * p)) + a$
   zs = INT(zs / p)
LOOP
IF d = 0 THEN 6
xs = t - INT(t)
DO UNTIL xs = 0
   b$ = b$ + LTRIM$(STR$(INT(xs * p)))
   xs = xs * p
   xs = xs - INT(xs)
LOOP
6 PRINT "( "; n$; " )"; s; "= ( "; a$;
IF d <> 0 THEN PRINT " . "; b$;
PRINT " )"; p
END

4 楼

(4F8)H
(4)H=(0100)2 (F)H=(1111)2 (8)H=(1000)2
(4F8)H=(100 1111 1000)2

5 楼

用你输入的数整除2,把余数保存到一个字符串里,商再整除2,余数再保存,直到商为0,再把字符串里保存的余数反序输出,老帖子里都有,自己编吧

6 楼

我不需要程序,我只要思路,不过还是谢谢各位,因为我自己已经琢磨出了方法,不过还是加分吧

我来回复

您尚未登录,请登录后再回复。点此登录或注册