中易网

任意一个正整数都可以用2的幂次方表示

答案:5  悬赏:40  
解决时间 2021-02-28 20:05
任意一个正整数都可以用2的幂次方表示
最佳答案
也不说用什么语言,怎么给你写程序嘛,还是你自己写吧,用递归来做这样的程序是很简单的,不用管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
        s$ = "2" + s$
      ELSE
        IF j = 0 THEN
          s$ = "2(0)" + s$
        ELSE
          s$ = "2(2)" + s$
        END IF
      END IF
    END IF
  END IF
  I = INT(I / 2)
  j = j + 1
LOOP
STR2$ = s$
END FUNCTION

DECLARE FUNCTION STR2$ (X!)
INPUT X
PRINT STR2$(X)

有主程序和函数,我是按F2进行切换分开复制的,我也不太熟悉QBASIC的操作,希望你是高手,一看就明白。
全部回答
不就是十进制都能转2进制吗?
C语言程序,编死我了!
#include<stdio.h>
void main()
{
int deep(int m,int r);
int n;
printf("input a number:");
scanf("%d",&n);
if(n>=1)
{ deep(n,0);
printf("\n");
}
else
printf("data error!");
}
int deep(int m,int r)
{
if(m==1)
switch(r)
{
case 0:printf("2(0)");break;
case 1:printf("2");break;
case 2:printf("2(2)");break;
default:
{
printf("2(");
deep(r,0);
printf(")");
}
}
else
{
deep(m/2,r=r+1);r--;
if(m%2==1)
switch(r)
{
case 0:printf("+2(0)");break;
case 1:printf("+2");break;
case 2:printf("+2(2)");break;
default:
{
printf("+2(");
deep(r,0);
printf(")");
}
}
}
}
注意,计算机中数字本身就是二进制表示的,即每一位都是2的次幂。
所以只需把内部表示方法表达出来就可以了,根本无须刻意编程。
varn:integer;
procedure bin(k:integer);
var
b:array[0..15] of integer;
i,p:integer;
first:boolean;
begin
p:=-1;
if k=0 then
write(0)
else begin
while k>0 do
begin
inc(p);
b[p]:=k mod 2;
k:=k div 2;
end;
first:=true;
for i:=p downto 0 do
if b[i]=1 then
begin
if first then first:=false else write('+');
if i=1 then write('2')
else begin
write('2(');
bin(i);
write(')');
end;
end;
end;
end;
begin
write('n=');
readln(n);
bin(n);
writeln;
end.
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
华硕zx53vw6300打游戏卡为啥?
杭州什么站有去绍兴的车?杭州北站有没有去绍
为什么用易语言取得cookie和浏览器不一样
急求:海子经典诗歌春暖花开韩文翻译版,要音
宾馆停车场(宾馆停车场)地址在哪,我要去那里
喜欢在一起吃喝玩乐的同学群名叫什么
别克昂克拉1.4t防冻液漏 维修多少钱
蓝博旺叉车怎么样?和山河智能发动机是一样的
女孩子说喜欢刺激是怎么个刺激法有谁能告诉我
童装超市地址有知道的么?有点事想过去
109 满修 WZ或ST 啥价? 空号的
如何能听懂BBC,我已经连续听了四个多月的BBC,
杉岭乡地址有知道的么?有点事想过去
小明用80元钱买了一条狗,后来以100元的价格卖
平安实验幼儿园地址在什么地方,想过去办事
推荐资讯
美国东海岸最大的港口是什么?
腾讯都是微信和qq登陆,怎么用手机号登陆
晋城哪有卖青砖?老房子用的那种?
中国人寿保险股份有限公司略阳县支公司地址有
合作与竞争辩论,反方如何辩论
有什么经典的散文,现当代的,中国的!
在上海第一妇婴保健院看病,昆山社保可报销吗
举白旗代表投降是从什么时候开始的?为什么啊
大话西游2 跨服买16级武器, 1700元,来回跨
突然很想有种想被呵护被照顾,被宠爱的感觉,
关于3DMAX挤出的尺寸问题
公积金提过一次现金,买房子后还能提出现金吗
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?