任意一个正整数都可以用2的幂次方表示
来源:百度知道 编辑:UC知道 时间:2024/05/22 06:09:05
任意一个正整数都可以用2的幂次方表示,例如:137=2^7+2^3+2^0,同时约定次方用括号来表示,即a^b=a(b)。由此可知,137可表示:2(7)+2(3)+2(0)。进一步:7=2^2+2+2^0(2^1用2表示),3=2+2^0。所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)。
又如:1315=2^10+2^8+2^5+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的0,2表示(在表示中不能有空格)
样例:输入:137
输出:137=2(2(2)+2+2(0))+2(2+2(0))+2(0)
注意:回答时写出程序,过程,方法。
用QBASIC设计程序.
又如:1315=2^10+2^8+2^5+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的0,2表示(在表示中不能有空格)
样例:输入:137
输出:137=2(2(2)+2+2(0))+2(2+2(0))+2(0)
注意:回答时写出程序,过程,方法。
用QBASIC设计程序.
也不说用什么语言,怎么给你写程序嘛,还是你自己写吧,用递归来做这样的程序是很简单的,不用管n有多大,因为n太大以后就需要多次扫描。
对于任意的数n,可以根据其二进制形态哪些位数为1改为∑2(i)的形式,然后递归把里面括号中大于的2的数进行分解,最后没有大于的2的指数出现即可。
设计一个把n转换为字符串的函数,逐位转换时,如果遇到大于2的指数就递归调用一次本函数,装配一下字符串即可。
补充:
今天花了半小时下载和学习了QBASIC,下面是我人生的第一个QBASIC程序,调试通过,结果保证正确:
FUNCTION STR2$ (X)
LET s$ = ""
LET I = X
LET j = 0
DO WHILE I > 0
IF I MOD 2 = 1 THEN
IF s$ <> "" THEN s$ = "+" + s$
IF j > 2 THEN
s$ = "2(" + STR2$(j) + ")" + s$
ELSE
IF j = 1 THEN
&n