题目描述

任何一个正整数都可以用 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 的 0, 2 表示(在表示中不能有空格)。

输入输出样例

输入 #1

1315

输出 #1

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

说明/提示

【数据范围】

对于100% 的数据1≤n≤2×10^4

分析:一道有点毒的递归题,思路比较好想。对一个数比如137,不断用2的次方逼近,比如先用2^7=128第一次逼近,剩下9,9再用2^3=8逼近剩下1。也就是分治的思想。但是实现有些麻烦,直接看代码,细节都在代码里

#include <iostream>
//#include<fstream>
#include<ctime>
#include<math.h>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
string s = "";
int n;
int pw(int a, int b) {//cmath里的pow返回的是浮点数,讨论的时候异常麻烦,自己写一个int sum = 1;for (int j = 1; j <= b; j++) {sum *= a;}return sum;
}
void  dp(int n) {int j;if (n == 0)return;//特判for ( j = 0;; j++) {if (n < pw(2, j)) {j--;break;}}if (j == 0)cout << "2(0)";//特殊情况的输出,0被n特判,但是次方可能出现0if (j == 1)cout << "2";//特殊格式if (j > 1) {//一般情况cout << "2(";dp(j);cout << ")";}if (n!=pw(2,j))//大于2的次方{cout << "+";dp(n - pw(2, j));//递归剩下的数}
}
int main()
{cin >> n;dp(n);return 0;
}

P1010 [NOIP1998 普及组] 幂次方 递归模拟相关推荐

  1. P1010 [NOIP1998 普及组] 幂次方 题解

    P1010 [NOIP1998 普及组] 幂次方 题解 题目描述 任何一个正整数都可以用 2 的幂次方表示.例如 137 = 2 7 + 2 3 + 2 0 . 137=2^7+2^3+2^0. 13 ...

  2. 信息学奥赛一本通 1208:2的幂次方表示 | OpenJudge 2.2 8758:2的幂次方表示 | 洛谷 P1010 [NOIP1998 普及组] 幂次方

    [题目链接] ybt 1208:2的幂次方表示 OpenJudge 2.2 8758:2的幂次方表示 洛谷 P1010 [NOIP1998 普及组] 幂次方 [题目考点] 1. 递归 [解题思路] 递 ...

  3. 洛谷P1010 [NOIP1998 普及组] 幂次方

    文章目录 前言 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 [数据范围] 代码 解析 结尾 前言 在做完洛谷P1010 [NOIP1998 普及组] 幂次方这道题之后,我 ...

  4. 洛谷——P1010 [NOIP1998 普及组] 幂次方

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

  5. 洛谷P1010 [NOIP1998 普及组] 幂次方 C语言/C++

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

  6. 洛谷千题详解 | P1010 [NOIP1998 普及组] 幂次方【C++、Java、Python、Pascal语言】

    博主主页:Yu·仙笙 专栏地址:洛谷千题详解 目录 题目描述 输入格式 输出格式 输入输出样例 解析: C++源码: Pascal源码: Java源码: Python源码: ------------- ...

  7. 洛谷P1010 [NOIP1998 普及组] 幂次方题解

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

  8. 洛谷 P1010 [NOIP1998 普及组] 幂次方

    题目链接 题目大意 任何一个正整数都可以用 2 的幂次方表示.例如 137=27+23+20.137=2^7+2^3+2^0.137=27+23+20. 输入一个整数n,用0和2的二进制表示该整数n. ...

  9. P1010 [NOIP1998 普及组] 幂次方

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

最新文章

  1. R语言使用broom包将回归模型(线性回归、逻辑回归、比例风险回归)的结果整理成dataframe并导出到excel等文件中:基于mtcars和colon数据集
  2. Paging of Large Resultsets in ASP.NET中介绍的SET ROWCOUNT方式存储过程的问题
  3. php json无法解析中文,json 无法解析解决方法
  4. CentOS 命令大全 (转)
  5. 王者荣耀服务器维护啥时候结束,王者荣耀维护几点结束今天?11月10日维护公告...
  6. flex gallery / 产品展示
  7. channel c3 disabled, job failed on it will be run on another channel
  8. 超全必读!NLP 事件抽取综述(下)
  9. 昨晚学妹参加了B站秋招笔试,还想考考我?
  10. ECharts使用—折线图动态加载
  11. 对String值不可变的理解以及String类型的引用传递问题
  12. xlsx表格怎么筛选重复数据_excel表格怎么筛选重复数据
  13. Segger和Micrium之间的区别和联系
  14. DNA测序技术的发展史之——第二代测序技术
  15. requests使用cookie模拟登陆豆瓣
  16. java 格林尼治生僻时间转换
  17. html5中歌曲和歌词同步的方法
  18. 7-69 战争地图(邻接矩阵和邻接表版本) (25 分)
  19. 电商后台设计:品类管理
  20. java 图片相似搜索_JAVA比较两张图片相似度的方法

热门文章

  1. 基于c语言图像灰度拉伸算法实现,c语言实现图像灰度均衡化
  2. mysql如何修改字段允许为空
  3. 毕业论文知识点记录(六)——基于R语言优化maxent模型
  4. Linux基础命令-tar打包压缩文件
  5. 怎么做网线,网线水晶头接法和线序(图文详解)
  6. 如何构建用户画像,给用户打“标签”?
  7. 怎么去掉ECShop购物流程中收货人电子邮箱必填
  8. android ios动态模糊效果,iOS实现模糊效果的几种方法
  9. spring配置详解
  10. (转)关于用户管理模块