如何将一个整数分解成2的n次幂相加的形式,如100=2^6+2^5+2^2,PASCAL,附带说明。
答案:2 悬赏:30 手机版
解决时间 2021-02-19 21:19
- 提问者网友:不要迷恋哥
- 2021-02-19 00:50
数学方法与PASCAL
最佳答案
- 五星知识达人网友:何以畏孤独
- 2021-02-19 02:28
利用短除法写出除以2後的商及馀数即可表示之
2 │ 100
商-> 2 │ 50 0 <-馀数
商-> 2 │ 25 0 <-馀数
商-> 2 │ 12 1 <-馀数
商-> 2 │ 6 0 <-馀数
商-> 2 │ 3 0 <-馀数
商 1 1 <-馀数
100=1*2^6+1*2^5+0*2^4+0*2^3+1*2^2+0*2+0=2^6+2^5+2^2
2 │ 100
商-> 2 │ 50 0 <-馀数
商-> 2 │ 25 0 <-馀数
商-> 2 │ 12 1 <-馀数
商-> 2 │ 6 0 <-馀数
商-> 2 │ 3 0 <-馀数
商 1 1 <-馀数
100=1*2^6+1*2^5+0*2^4+0*2^3+1*2^2+0*2+0=2^6+2^5+2^2
全部回答
- 1楼网友:过活
- 2021-02-19 03:37
//大概能过n=10000的数据,够了吗,不够我再优化。
var
n,i,j,dig:longint;
a:array[1..1000000]of longint;
begin
read(n);
a[1]:=1;
dig:=1;
for i:=1 to n do begin
for j:=1 to dig do a[j]:=a[j]shl 1;//shl 1等价于*2,只是运行速度比*2略快一点
for j:=1 to dig-1 do begin
inc(a[j+1],a[j]div 10);
a[j]:=a[j]mod 10;
end;
while a[dig]>9 do begin
inc(dig);
a[dig]:=a[dig-1]div 10;
a[dig-1]:=a[dig-1]mod 10;
end;
end;
for i:=dig downto 1 do write(a[i]);
end.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯