回 帖 发 新 帖 刷新版面

主题:哪位高手能帮我做一下这一道题目?谢谢了!

任何一个正整数都可以用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你说的在清楚点啊

3 楼

我的电脑上不了网,所以不好做。
纸上谈谈兵吧。
不过说真的,我很讨厌帮别人做作业,所以我还是说说思路就好了,你们慢慢思考,做出来给我看看就行了。

1.  可以先将所求数值转换成二进制。
2.  看有多少个1,每个1就是一个2的乘方。就是其中一个式子了。
3.  从第一个1开始,看它的位置,把它的位置再重复转换成二进制,直至到只有最后单位二进制数为止。
4.  重复上一步。
5.  在上面的过程中坎入关于2的字符串转换。
6.  得到结果

其实10=8+2=2^〔2^1+2^0〕+2^1

4 楼

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 楼

你能把思路,再说的清楚点吗,或者,你举一下例子,一步一步来,可以吗?谢谢了

6 楼

你这个程序好像跟题目不太对,假如,输入137,输出是跟题目不一样的结果,因为它2^2=2(2),这样也可以的,你却,全部把他化成了2^2=2(2(2(0))).

7 楼

哈哈,你不是要2的指数形式吗?我干脆就做彻底一点了。
我用^号不用括号,是因为两种括号容易混淆。
等我明天有电脑上网的时候再改吧,2的2次方很容易改的,只要在二进制转换函数那作一点更改就行了。

8 楼

你快点帮我改吗,可不可以,再把思路说的详细一点,谢谢你了!

9 楼

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 楼

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的值作同样的处理(调用自已)就行了.

我来回复

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