主题:哪位高手能帮我做一下这一道题目?谢谢了!
莹萍
[专家分:130] 发布于 2005-08-09 15:18:00
任何一个正整数都可以用2的幂次方表示。
例如:137=27+23+20。
同时约定方次用括号来表示,即ab可表示为a(b)。
由此可知,137可表示为:2(7)+2(3)+2(0)
进一步:7=22+21+20(21用2表示)
3=2+20
所以最后137可表示为:
2(2(2)+2+2(0))+(2+2(0))+2(0)
又如:1315=210+28+25+2+1
所以1315最后可表示为:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
输入:正整数(n≤20000)
输出:符合约定的n的O,2表示(在表示中不能有空格)
回复列表 (共14个回复)
沙发
moz [专家分:37620] 发布于 2005-08-09 16:03:00
与二进制原理相同,反复转换就可以了
板凳
zqnhlm [专家分:780] 发布于 2005-08-09 21:40:00
moz你说的在清楚点啊
3 楼
moz [专家分:37620] 发布于 2005-08-10 01:48:00
我的电脑上不了网,所以不好做。
纸上谈谈兵吧。
不过说真的,我很讨厌帮别人做作业,所以我还是说说思路就好了,你们慢慢思考,做出来给我看看就行了。
1. 可以先将所求数值转换成二进制。
2. 看有多少个1,每个1就是一个2的乘方。就是其中一个式子了。
3. 从第一个1开始,看它的位置,把它的位置再重复转换成二进制,直至到只有最后单位二进制数为止。
4. 重复上一步。
5. 在上面的过程中坎入关于2的字符串转换。
6. 得到结果
其实10=8+2=2^〔2^1+2^0〕+2^1
4 楼
moz [专家分:37620] 发布于 2005-08-10 13:39:00
PRINT Fen2$(137)
FUNCTION Fen2$ (a&)
b$ = Xt2$(a&)
l%=len(b$)
DO
i% = INSTR(i% + 1, b$, "1")
IF i% THEN d$ = d$+"2^("+ Fen2$(l%-i%)+")+"
LOOP WHILE i%
IF d$ = "" THEN d$ = "0" ELSE d$ = LEFT$(d$, LEN(d$) - 1)
Fen2$ = d$
END FUNCTION
FUNCTION Xt2$ (g&)
DO UNTIL g& < 1
IF g& MOD 2 THEN k$ = "1"+k$ ELSE k$ ="0"+ k$
g& = g& \ 2
LOOP
IF k$ = "" THEN k$ = "0"
Xt2$ = k$
END FUNCTION
5 楼
莹萍 [专家分:130] 发布于 2005-08-10 22:01:00
你能把思路,再说的清楚点吗,或者,你举一下例子,一步一步来,可以吗?谢谢了
6 楼
莹萍 [专家分:130] 发布于 2005-08-10 22:26:00
你这个程序好像跟题目不太对,假如,输入137,输出是跟题目不一样的结果,因为它2^2=2(2),这样也可以的,你却,全部把他化成了2^2=2(2(2(0))).
7 楼
moz [专家分:37620] 发布于 2005-08-11 01:12:00
哈哈,你不是要2的指数形式吗?我干脆就做彻底一点了。
我用^号不用括号,是因为两种括号容易混淆。
等我明天有电脑上网的时候再改吧,2的2次方很容易改的,只要在二进制转换函数那作一点更改就行了。
8 楼
莹萍 [专家分:130] 发布于 2005-08-11 09:00:00
你快点帮我改吗,可不可以,再把思路说的详细一点,谢谢你了!
9 楼
莹萍 [专家分:130] 发布于 2005-08-11 09:32:00
FUNCTION Fen2$ (a&)
b$ = Xt2$(a&)
l%=len(b$)
DO
i% = INSTR(i% + 1, b$, "1")
IF i% THEN d$ = d$+"2^("+ Fen2$(l%-i%)+")+"
LOOP WHILE i%
IF d$ = "" THEN d$ = "0" ELSE d$ = LEFT$(d$, LEN(d$) - 1)
Fen2$ = d$
END FUNCTION
这部分程序,在完成,怎么样的一个功能呢,能帮我解释一下吗?
10 楼
moz [专家分:37620] 发布于 2005-08-11 10:02:00
PRINT Fen2$(137)
FUNCTION Fen2$ (a&) '[color=FF00FF]这就是按要求分解成2的指数形式的函数[/color]
select case a&
case 2: d$="2"
case 1: d$="1"
case 0: d$="0"
case is <0
case else
b$ = Xt2$(a&) '[color=FF00FF]把它转换成2进制[/color]
l%=len(b$)
DO
i% = INSTR(i% + 1, b$, "1")
IF i% THEN d$ = d$+"2^("+ Fen2$(l%-i%)+")+"
LOOP WHILE i%
if d$="" then d$="0" else d$ = LEFT$(d$, LEN(d$) - 1)
end select
Fen2$ = d$
END FUNCTION
FUNCTION Xt2$ (g&) '[color=FF00FF]把数值转换成二进制形式的字符[/color]
DO UNTIL g& < 1
IF g& MOD 2 THEN k$ = "1"+k$ ELSE k$ ="0"+ k$
g& = g& \ 2
LOOP
IF k$ = "" THEN k$ = "0"
Xt2$ = k$
END FUNCTION
道理比较简单
因为你需要2的指数形式
把一个数转换成二进制后
比如137= 1 0 0 0 1 0 0 1
/ / \
代表: 2^7 2^3 2^0
至于是2的多少次方,这由它的位置所决定,不懂的自己去学学二进制
因为要反复计算,再把7的值作同样的处理(调用自已)就行了.
我来回复