题目描述

任何一个正整数都可以用 22 的幂次方表示。例如 137=2^7+2^3+2^0137=27+23+20。

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

由此可知,137137 可表示为 2(7)+2(3)+2(0)2(7)+2(3)+2(0)

进一步:

7= 2^2+2+2^07=22+2+20 ( 2^121 用 22 表示),并且 3=2+2^03=2+20。

所以最后 137137 可表示为 2(2(2)+2+2(0))+2(2+2(0))+2(0)2(2(2)+2+2(0))+2(2+2(0))+2(0)。

又如 1315=2^{10} +2^8 +2^5 +2+11315=210+28+25+2+1

所以 13151315 最后可表示为 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)。

输入格式

一行一个正整数 nn。

输出格式

符合约定的 nn 的 0, 20,2 表示(在表示中不能有空格)。

输入输出样例

输入 #1复制

1315

输出 #1复制

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

思路朴素版

由题目中 1315=2^{10} +2^8 +2^5 +2+11315=210+28+25+2+1

来举例:

一.

2的10次方的10先被分解为 2的3次方+2的1次方

2(2(3))+2)

二.

2的1次方的1不用分解,而2的3次方的3再被分解为 2的1次方再加上2的0次方

2(2(2+2(0))+2)

三.

2的1次方的1不用再分解,2的0次方的0也不用再分解

2(2(2+2(0))+2)

大致可以分为

1.需要分解

2.不用再分解

2的产生:

可以发现,每一次递归都会产生一个2

最内层小括号(0)和(2)的产生:

当分解的时候发现指数与0或2相等,不需要继续分解了,就直接输出(0),(2)

外层括号的产生:

还需要再分解,递归分解的时候

printf("(");
dfs(cn);
printf(")");

递归要注意递归结束的条件

#include <iostream>
#include <algorithm>
using namespace std;
void dfs(int n)
{if(n==0)return;   //递归终止的条件,被分解完毕 printf("2");  //每一次递归都以2为开头int cn=-1,e=1;while(e<=n){cn++;if(cn!=0)e=e*2;   } cn--; //因为e最终的结果是大于n的,相当于cn多加了,e也 多乘了 if(cn==0||cn==2)printf("(%d)",cn);//如果cn==0,不用管,这是2(0)也就是单独一个2else if(cn>=3) //括号里面的数还要继续分解 {printf("(");dfs(cn);printf(")");} e=e/2;  //e多乘了 n=n-e; //n还有没分解完的部分,也就是之前所说的括号外面的数 if(n) {printf("+"); dfs(n);}
}
int main()
{int n;cin>>n;dfs(n);
}

第二种做法 :位运算版

#include <iostream>
#include <cstdio>
using namespace std;
void dfs(int n)
{if(n==0)  //递归终止的条件 {printf("0");return;}if(n==2) //递归终止的条件 {printf("2");return;}int cn=0;int pos;for(int i=0;i<=20;i++){if(n>>i&1)pos=i;   //求最高位1的位置 }for(int i=pos;i>=0;i--)  //从最高位开始,逆序,因为如果不逆序,结果的顺序会反过来 {if(n>>i&1){if(i==1){if(cn>=1)   //cn是统计参加加法运算的项数,如果cn=1,则不需要添加+号 printf("+");printf("2");cn++;}else{if(cn>=1)printf("+");printf("2");printf("(");dfs(i);printf(")");cn++;}}}
}
int main()
{int n;cin>>n;dfs(n);
}

P1010 幂次方 【分治递归】相关推荐

  1. P1010 幂次方 (递归+分治)

    题目描述 任何一个正整数都可以用2的幂次方表示.例如 137=2^7+2^3+2^0 同时约定方次用括号来表示,即a^b可表示为a(b). 由此可知,137可表示为: 2(7)+2(3)+2(0) 进 ...

  2. 【每日刷题】P1010 幂次方题解

    [每日刷题]P1010 幂次方题解 题目描述 任何一个正整数都可以用 $2$ 的幂次方表示.例如 $137=2^7+2^3+2^0 $. 同时约定方次用括号来表示,即 $a^b$ 可表示为 $a(b) ...

  3. 洛谷 p1010 幂次方 python实现

    洛谷 p1010 幂次方 python实现 描述 任何一个正整数都可以用2的幂次方表示.例如 137= 2 7 + 2 3 + 2 0 2^7+2^3+2^0 27+23+20 同时约定方次用括号来表 ...

  4. 洛谷P1010 幂次方(递归算法)

    题目描述 任何一个正整数都可以用 22 的幂次方表示.例如 137=2^7+2^3+2^0137=27+23+20. 同时约定方次用括号来表示,即 a^bab 可表示为 a(b)a(b). 由此可知, ...

  5. P1010 幂次方 P1022 计算器的改良

    P1010 幂次方 一.题目 https://www.luogu.org/problemnew/show/P1010 二.代码 #include<bits/stdc++.h> using ...

  6. 洛谷 p1010 幂次方

    #include <cstdio> #include <cmath> using namespace std; void dg(int n) {int a;if(n==0) r ...

  7. 【洛谷】P1010 幂次方

    [NOIP1998 普及组] 幂次方 题目描述 任何一个正整数都可以用 222 的幂次方表示.例如 $137=27+23+2^0 $. 同时约定方次用括号来表示,即 aba^bab 可表示为 a(b) ...

  8. 洛谷-P1010 幂次方

    题目描述 任何一个正整数都可以用 22 的幂次方表示.例如 137=2^7+2^3+2^0137=27+23+20. 同时约定方次用括号来表示,即 a^bab 可表示为 a(b)a(b). 由此可知, ...

  9. 洛谷p1010 幂次方

    题目: 这道题其实就是一个简单的进制转换问题,分析一下可能出现的各种情况即可这里需要注意的就是数字2输出的就是2,而很多算法可能会输出2(2(0))也就是2^1,处理细节到1,2还有3即可,直接上代码 ...

最新文章

  1. 帝国cms微信小程序多语言相亲交友制作记录难点使用的小程序组件分析
  2. 安全的SD-WAN是如何工作?—Vecloud
  3. 将字符串型转换为整形
  4. 【深度学习】在PyTorch中使用 LSTM 进行新冠病例预测
  5. Android开发之如何保证Service不被杀掉(前台服务)
  6. .NET的一点历史故事:误入歧途,越陷越深
  7. 使用Lambda,Api Gateway和CloudFormation在AWS云上使用Java
  8. 利用anaconda prompt打开jupyter notebook
  9. 四川大学计算机应用基础第二次,四川大学川成教2017年秋季《计算机应用基础》第二次作业...
  10. TokenInsight:BTC新增流量小幅下降,链上活跃度平稳
  11. 图谱特征与卷积神经网络的名优大米无损鉴别
  12. LNMP环境下搭建wordpress
  13. veevalidate的使用3.X版本
  14. csv可以保存特殊字符_浅谈CSV注入漏洞
  15. CTreeCtrl 类的InsertItem成员函数
  16. Latex英文论文模板汇总(elsevier、arXiv、IEEE Access)
  17. uniapp开发微信小程序,主包(分包超过限制)
  18. 简易歌曲推荐网页制作
  19. 在职研一英语课件难句整理
  20. 上海始终未出现真正“富人区”

热门文章

  1. PCIe交换机的作用和参数解读:PEX89144为例,PCIe交换机能做些什么
  2. ios安装文件ipa下载及bundle-identifier获取
  3. 这才知道我的全部努力,不过完成了普通的生活。
  4. 什么企业可以申报高新技术企业
  5. 图像识别的原理和应用:从基础知识到实际案例
  6. emwin自定义颜色
  7. ubuntu卸载微信
  8. 技术体系构建_构建出色的技术简历的简单指南
  9. 直播平台源码的高并发问题解决
  10. 基于 function-plot.js 开源库绘制数学函数图像实现兼文档翻译