天天看点

幂次方-洛谷 1010

题目描述

任何一个正整数都可以用的幂次方表示。例如

    =^+^+^         
同时约定方次用括号来表示,即a^b 可表示为a(b)。

由此可知,可表示为:

    ()+()+()
进一步:= ^++^ (^用表示)

    =+^   
所以最后可表示为:

    (()++())+(+())+()
又如:

    =^ +^ +^ ++
所以最后可表示为:

    ((+())+)+((+()))+(()+())++()
输入输出格式

输入格式:
一个正整数n(n≤)。

输出格式:
符合约定的n的,表示(在表示中不能有空格)

输入输出样例

输入样例#1:

输出样例#1:
((+())+)+((+()))+(()+())++()

题解:这道题用递归的方法,先求k为的多少次方,然后因为该题只能输出,和括号,所以如果m大于等于,则需要递归,小于则直接输出,如果有余数,则将余数继续递归。

var n:longint;
procedure mi(k:longint);
var s,m:longint;
begin
  m:=;
  s:=;
  while s*<=k do
    begin
      s:=s*;
      inc(m);
    end;
  case m of
    :write('2(0)');
    :write();
    :write('2(2)');
    else begin write('2(');mi(m);write(')');end;
  end;
  if k-s<> then
    begin
      write('+');
      mi(k-s);
    end;
end;
begin
  readln(n);
  mi(n);
  writeln;
end.