回 帖 发 新 帖 刷新版面

主题:为什么不对?

进制数
给出一个正整数n(1≤N≤1023),将其化为10位二进制数,然后计算出二进制数中的“1”的个数,若1的个数为奇数,则在最高位前加上一个1,否则加上一个0,最后将在此基础上形成的11位二进制数,用3个十六进制数输出。
 例  如:输入 23   化为二进制数为: 0000010111
         因为1的个数是4个,在最高位前加0,得到:00000010111
          输出:0H,1H,7H
 再例如:输入 453   化为二进制数为: 0111000101
                因为1的个数是奇数,所以在最高位前加1,得到:10111000101
          输出:5H,CH,5H        
   【输入格式】键盘输入。一个正整数n。
【输出格式】根据形成的11位二进制数,用3个十六进制数输出。
【样例】
输入:                      输出
       453                      5H,CH,5H


我的程序:
CLS
INPUT n
IF n < 1 OR n > 1023 THEN PRINT "重输": END
DO
  y = n MOD 2
  n = n \ 2
  x$ = LTRIM$(STR$(y)) + x$
LOOP UNTIL n = 0
IF LEN(x$) <> 10 THEN q$ = STRING$(10 - LEN(x$), "0"): x$ = q$ + x$
FOR i = 1 TO LEN(x$)
  IF VAL(MID$(x$, i, 1)) = 1 THEN h = h + 1
NEXT i
IF h MOD 2 <> 0 THEN x$ = "1" + x$ ELSE x$ = "0" + x$
a$(1) = LEFT$(x$, 3): a$(2) = MID$(x$, 4, 4): a$(3) = RIGHT$(x$, 4)
FOR i = 1 TO 3
  y$ = "": x$ = "": n$ = a$(i): GOSUB 20
  PRINT x$; "H"
NEXT i
PRINT m$
END

20 FOR i = LEN(n$) TO 1 STEP -1
  a = VAL(MID$(n$, LEN(n$) + 1 - i, 1))
  x = x + a * 2 ^ (i - 1)
NEXT i
DO
  y = x MOD 16
  x = x \ 16
  IF y > 9 THEN y$ = CHR$(55 + y) ELSE y$ = CHR$(48 + y)
  x$ = y$ + x$
LOOP UNTIL x = 0
RETURN

为什么不对,请高手指点.

回复列表 (共4个回复)

沙发

CLS
INPUT n
IF n < 1 OR n > 1023 THEN PRINT "重输": END
DO
y = n MOD 2:n = n \ 2:x$ = LTRIM$(STR$(y)) + x$:w=w+1
if y=1 then h=h+1
LOOP UNTIL w=10
IF h MOD 2 <> 0 THEN x$ = "1" + x$ ELSE x$ = "0" + x$
a$(1) = LEFT$(x$, 3): a$(2) = MID$(x$, 4, 4): a$(3) = RIGHT$(x$, 4)
FOR i = 1 TO 3
  y$ = "": x$ = "": n$ = a$(i): GOSUB 20
  PRINT x$; "H"
NEXT i
PRINT m$
END
20 FOR i = LEN(n$) TO 1 STEP -1
  a = VAL(MID$(n$, LEN(n$) + 1 - i, 1))
  x = x + a * 2 ^ (i - 1)
NEXT i
DO
  y = x MOD 16
  x = x \ 16
  IF y > 9 THEN y$ = CHR$(55 + y) ELSE y$ = CHR$(48 + y)
  x$ = y$ + x$
LOOP UNTIL x = 0
RETURN

板凳

正确答案在此:
CLS
INPUT n
FOR i = 1 TO 10
Y = n MOD 2: n = n \ 2: Y$ = LTRIM$(STR$(Y)) + Y$
IF Y = 1 THEN h = h + 1
NEXT i
IF h MOD 2 <> 0 THEN Y$ = "1" + Y$ ELSE Y$ = "0" + Y$
A$ = MID$(Y$, 1, 3): GOSUB 20: PRINT X$; "H"; ",";
A$ = MID$(Y$, 4, 4): GOSUB 20: PRINT X$; "H"; ",";
A$ = MID$(Y$, 8, 4): GOSUB 20: PRINT X$; "H"
END
20 X = 0: X$ = ""
FOR i = LEN(A$) TO 1 STEP -1
  Q$ = MID$(A$, LEN(A$) + 1 - i, 1)
  IF ASC(Q$) > 57 THEN B = ASC(Q$) - 55 ELSE B = VAL(Q$)
  X = X + B * 2 ^ (i - 1)
NEXT i
DO
  Y = X MOD 16
  X = X \ 16
  IF Y > 9 THEN X$ = CHR$(55 + Y) + X$ ELSE X$ = CHR$(48 + Y) + X$
LOOP UNTIL X = 0
RETURN

3 楼

CLS
INPUT N
FOR I = 1 TO 10
Y = N MOD 2
N = N \ 2
Y$ = LTRIM$(STR$(Y)) + Y$
IF Y = 1 THEN A = A + 1
NEXT I
IF A MOD 2 = 0 THEN Y$ = "0" + Y$ ELSE Y$ = "1" + Y$
A$ = MID$(Y$, 1, 3): GOSUB 10: PRINT X$; "H"; ",";
A$ = MID$(Y$, 4, 4): GOSUB 10: PRINT X$; "H"; ",";
A$ = MID$(Y$, 8, 4): GOSUB 10: PRINT X$; "H";
END
10 X = 0: X$ = ""
FOR I = 1 TO LEN(A$)
  B$ = MID$(A$, LEN(A$) + 1 - I, 1)
  IF ASC(B$) > 57 THEN B = ASC(B$) - 55 ELSE B = VAL(B$)
  X = X + B * 2 ^ (I - 1)
NEXT I
DO
  Y = X MOD 16
  X = X \ 16
  IF Y > 9 THEN X$ = CHR$(55 + Y) + X$ ELSE X$ = CHR$(48 + Y) + X$
LOOP UNTIL X = 0
RETURN








4 楼

CLS
INPUT n
FOR i = 1 TO 10
Y = n MOD 2: n = n \ 2: Y$ = LTRIM$(STR$(Y)) + Y$
IF Y = 1 THEN h = h + 1
NEXT i
IF h MOD 2 <> 0 THEN Y$ = "1" + Y$ ELSE Y$ = "0" + Y$
A$ = MID$(Y$, 1, 3): GOSUB 20: PRINT X$; "H"; ",";
A$ = MID$(Y$, 4, 4): GOSUB 20: PRINT X$; "H"; ",";
A$ = MID$(Y$, 8, 4): GOSUB 20: PRINT X$; "H"
END
20 X = 0: X$ = ""
FOR i = LEN(A$) TO 1 STEP -1
  Q$ = MID$(A$, LEN(A$) + 1 - i, 1)
  IF ASC(Q$) > 57 THEN B = ASC(Q$) - 55 ELSE B = VAL(Q$)
  X = X + B * 2 ^ (i - 1)
NEXT i
DO
  Y = X MOD 16
  X = X \ 16
  IF Y > 9 THEN X$ = CHR$(55 + Y) + X$ ELSE X$ = CHR$(48 + Y) + X$
LOOP UNTIL X = 0
RETURN
刚才弄错了!

我来回复

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