Description
任何一个正整数都可以用2的幂次方表示。例如:
137=27+23+20
同时约定方次用括号来表示,即ab 可表示为a(b)。
由此可知,137可表示为:
2(7)+2(3)+2(0)
进一步:7= 22+2+20 (21用2表示)
3=2+20
所以最后137可表示为:
2(2(2)+2+2(0))+2(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)
Input
正整数(n≤20000)
Output
符合约定的n的0,2表示(在表示中不能有空格)
Sample Input
1315
Sample Output
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
解题思路:用一个递归过程,如果k=0就结束,把k变为二进制,用一个循环从二进制的长度downto到0,如果该位为0就输出(‘2)’),递归循环变量,输出(‘)’)。
程序:
var
n:longint;
procedure dg(k:longint);
var
b:array[0..15]of longint;
i,p:longint;
first:boolean;
begin
if k=0 then begin write(0); exit; end;
p:=-1;
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
begin
if b[i]=1 then
begin
if first then first:=false else write('+');
if i=1 then write(2)
else begin
write('2(');
dg(i);
write(')');
end;
end;
end;
end;
begin
readln(n);
dg(n);
writeln;
end.
版权属于:Chris
原文地址:http://blog.sina.com.cn/s/blog_83ac6af80102v0ia.html
转载时必须以链接形式注明原始出处及本声明。