回 帖 发 新 帖 刷新版面

主题:递归算法

输入一个数n(100000>n>0)
输出与它相等的只用0与2组成的最简表达式(递归算法)。
例:
N=129
N=128+1
N=2(7)+2(0)
N=2(2(2)+2+2(0))+2(0)
所以应输出2(2(2)+2+2(0))+2(0)

回复列表 (共6个回复)

沙发

就是转换成2进制嘛

板凳

那你做一做呀!
[em9][em9][em9]

3 楼

实际就是递归转换2进制。
比如:
(下列公式中的
              x = a1 + a2 + … + an 表示x = 2^a1 + 2^a2 + … 2……an) 
n = 434
(1)转换成2进制,直到等号后每一项小于等于2为止:
   434 = 8 + 7 + 5 + 4 + 1 
       = (3) + (2 + 1 + 0) + (2 + 0) + (2) + (0) 
       = (1 + 0) + (2 + 1 + 0) + (2 + 0) + (2) + (0)
(2)按题目格式输出:
   434 = 2(2(2 + 2(0))) + 2(2(2) + 2 + 2(0)) + 2(2(2) + 2(0)) + 2(2(2)) + 2(0)    

4 楼

程序?

5 楼

上面的是纸上谈兵,程序呢?这个程序我调试过了,是对的:
DECLARE SUB QB (k)
CLS
INPUT n
PRINT LTRIM$(STR$(n)); "=";
QB (n)
END

SUB QB (k)
DIM b(0 TO 15)
  p = -1
  IF k = 0 THEN
    PRINT "0";
  ELSE
    WHILE k > 0
      p = p + 1
      b(p) = k MOD 2
      k = k \ 2
    WEND
  END IF
  q = -1
  FOR i = p TO 0 STEP -1
    IF b(i) = 1 THEN
      IF q = -1 THEN q = 0 ELSE PRINT "+";
    IF i = 1 THEN
      PRINT "2";
    ELSE
      PRINT "2(";
      QB (i)
      PRINT ")";
    END IF
  END IF
NEXT i
END SUB
这也是进制转换中的题目!!!

6 楼

这可是我辛辛苦苦打出来的!!!

我来回复

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