NC16781. [NOIP1998]幂次方
描述
输入描述
正整数(n ≤ 20000)
输出描述
符合约定的n的0,2表示(在表示中不能有空格)
示例1
输入:
1315
输出:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
Python3 解法, 执行用时: 43ms, 内存消耗: 4552K, 提交时间: 2023-05-07 21:20:05
n = int(input()) def res(n): if n == 1: return "2(0)" elif n == 2: return "2" elif n == 3: return "2+2(0)" len_ = len(bin(n)) - 3 s = n - 2 ** len_ if s > 0: return f"2({res(len_)})+{res(s)}" else: return f"2({res(len_)})" print(res(n))
C++14(g++5.4) 解法, 执行用时: 5ms, 内存消耗: 496K, 提交时间: 2020-04-15 20:44:15
#include<iostream> using namespace std; int x; string run(int x,int i=0,string s=string("")){ if(x==0)return string("0"); do if(x&1)s=(i==1?"2":"2("+run(i)+")")+(s==""?"":"+")+s; while(++i,x>>=1); return s; } int main(){ cin>>x; cout<<run(x)<<endl; }
C++11(clang++ 3.9) 解法, 执行用时: 5ms, 内存消耗: 376K, 提交时间: 2019-07-30 08:50:44
#include<bits/stdc++.h> using namespace std; string run(int x,int i=0,string s=string("")) { if(x==0)return string("0"); do if(x&1)s=(i==1?"2":"2("+run(i)+")")+(s==""?"":"+")+s; while(++i,x>>=1); return s; } int main() { int x; cin>>x; cout<<run(x)<<endl; }