0分,望dalao指教(pascal)

P1010 [NOIP1998 普及组] 幂次方

望指教,谢谢了
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


|