望指教,谢谢了
by MiaoZ @ 2017-07-18 22:28: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(n≤20000)。
输出格式:
符合约定的n的0,2表示(在表示中不能有空格)
输入输出样例
输入样例#1: 输出样例#1:
1315 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
by MiaoZ @ 2017-07-18 22:33:23
我不会P语言;你运行一下试试
by 宋华颖 @ 2017-07-22 18:01:57
LZ我跟你的做法一样我也炸了呜呜
by hjwbwcy @ 2017-08-03 15:22:55
```cpp
var
n,i:longint;
a:array[0..15]of longint;
procedure dg(x:longint);
var
j,m:longint;
begin
m:=x;
j:=15;
while x>0 do
begin
if a[j]<=x then
begin
if j=1 then
begin
if x<m then write('+');
write('2');
end
else
begin
if x<m then write('+');
write('2(');
if j=0 then write('0')
else dg(j);
write(')');
end;
x:=x-a[j];
end;
dec(j);
end;
end;
begin
readln(n);
a[0]:=1;
for i:=1 to 15 do
a[i]:=a[i-1]*2;
dg(n);
end.
```
by ricowz @ 2017-08-14 10:58:27
```cpp
var
s:array[1..20000000] of ansistring;
n:longint;
function change(k:longint):ansistring;
var mi,tempk,sum:longint; temps:ansistring;
begin
if s[k]<>'' then exit(s[k]);
temps:='';
tempk:=k;
repeat
sum:=1; mi:=0;
repeat
sum:=sum*2; inc(mi);
until sum>k;
sum:=sum div 2;
dec(mi);
k:=k-sum;
if mi=1 then temps:=temps+s[2]+'+' else if mi=0 then temps:=temps+s[1]+'+' else temps:=temps+'2('+change(mi)+')+';
until k=0;
delete(temps,length(temps),1);
s[tempk]:=temps;
exit(s[tempk]);
end;
begin
s[1]:='2(0)';
s[2]:='2';
readln(n);
writeln(change(n));
end.
```
by Vermouthson637 @ 2017-08-26 12:50:37
2925c++10分AC答案供应站——2925解题站
```cpp
var n:int64;
procedure work(x:int64);
var t,s:int64;
begin
if x=1 then
begin
write('2(0)');
exit;
end;
if x=2 then
begin
write('2');
exit;
end;
if x=3 then
begin
write('2+2(0)');
exit;
end;
t:=2;
s:=0;
while t<=x do
begin
t:=t*2;
s:=s+1;
end;
write('2(');
work(s);
write(')');
if (x-t div 2<>0) then
begin
write('+');
work(x-t div 2);
end;
end;
begin
readln(n);
work(n);
end.
```
by 我很辣ji看签名 @ 2017-09-01 22:12:15
```cpp
var
n:longint;
function s1(n:longint):string;
var
s:string;
i:longint;
t:boolean;
begin
if n=0 then
begin
s1:='0';
exit;
end
else
if n=1 then
begin
s1:='2(0)';
exit;
end
else
if n=2 then
begin
s1:='2';
exit;
end;
s:='';
repeat
s:=chr(n mod 2+ord('0'))+s;
n:=n div 2;
until n=0;
t:=true;
for I := 1 to length(s)-2 do
if s[i]='1' then
begin
if t then
begin
s1:='2('+s1(length(s)-i)+')';
t:=false;
end
else
s1:=s1+'+2('+s1(length(s)-i)+')';
end;
if s[length(s)-1]='1' then
begin
if t=true then
begin
s1:='2';
t:=false;
end
else
s1:=s1+'+2';
end;
if s[length(s)]='1' then
begin
if t=true then
begin
s1:='2(0)';
t:=false;
end
else
s1:=s1+'+2(0)';
end;
end;
begin
readln(n);
writeln(s1(n));
end.
```
by HC小号 @ 2017-09-07 11:04:18
```cpp
Var
n:longint;
fh:char;
Procedure dfs(num:longint);
Var
i,l,z:longint;
Begin
while num>0 do
begin
l:=0; z:=1;
while z*2<=num do
begin
z:=z*2;
inc(l);
end;
if fh=')' then
write('+');
if l>2 then
begin
write('2(');
fh:='(';
dfs(l);
write(')');
end;
if l=2 then
write('2(2)');
if l=1 then
write('2');
if l=0 then
write('2(0)');
fh:=')';
num:=num-z;
end;
End;
Begin
readln(n);
fh:=' ';
dfs(n);
readln;
End.
```
by Komes @ 2017-09-07 18:02:43
不知道……
by Yue_Hen @ 2017-09-29 20:25:45