幂次方
题目描述
任何一个正整数都可以用2的幂次方表示,同时约定方次用括号来表示,即a^b 可表示为a(b)。
如:137=2(7)+2(3)+2(0)=2(2(2)+2+2(0))+2(2+2(0))+2(0)。
分析
先把n转换成一个二进制数放在数组里,按降幂输出,如果遇到次方大于2的就继续递归下去。
代码
const
maxn=1000;
var
n:longint;
procedure try(x:longint);
var
a:array[0..maxn] of longint;
i,p:longint;
begin
p:=0;
while x<>0 do
begin
a[p]:=x mod 2;
x:=x div 2;
inc(p);
end;
dec(p);
for i:=p downto 0 do
if a[i]=1 then
begin
if i<>p then write('+');
if i=0 then write('2(0)') else
if i=1 then write('2') else
begin
write('2(');
try(i);
write(')');
end;
end;
end;
begin
readln(n);
try(n);
end.