主题:递归算法
QB爱好者
[专家分:370] 发布于 2007-08-28 14:10:00
输入一个数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个回复)
沙发
leek9d [专家分:30] 发布于 2007-08-29 11:22:00
就是转换成2进制嘛
板凳
QB爱好者 [专家分:370] 发布于 2007-08-29 12:54:00
那你做一做呀!
[em9][em9][em9]
3 楼
Matodied [专家分:7560] 发布于 2007-08-29 14:01:00
实际就是递归转换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 楼
QB爱好者 [专家分:370] 发布于 2007-08-30 09:17:00
程序?
5 楼
QB小猪 [专家分:1200] 发布于 2007-09-04 14:27:00
上面的是纸上谈兵,程序呢?这个程序我调试过了,是对的:
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 楼
QB小猪 [专家分:1200] 发布于 2007-09-04 14:36:00
这可是我辛辛苦苦打出来的!!!
我来回复