任何一个正整数都可以用 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)

说明/提示

【数据范围】

对于 100\%100% 的数据,1 \le n \le 2 \times {10}^41≤n≤2×104。


#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include <iostream>
#pragma warning(disable:4996)
using namespace std;
//总结 本题就是  二进制, 递归
//熟悉一下递归就好了
//先用数组存个二进制  下标表示位数,内容表示幂
//然后从高往低  输出每个数
//最后一位 时不用输出加号  懂我意思吧
//本题更熟悉递归了
void search(int n)
{int temp = n;int k = 0;//表示有k个数要相加int p = 0;//记录幂int a[66] = { 0 };while (temp){if (temp & 1){a[++k] = p;}p++;temp >>= 1;}while (k)//输出k个 2的幂次方 相加呀{if (a[k] < 3)//2的幂次方小于3 那肯定直接干啊{if (a[k] == 1 && k > 1)//说明k不是最后一位{cout << "2+";}else if (a[k] == 1)//能到这里说明 k == 1 输出的是最后一位{cout << "2";}if ((a[k] == 0 || a[k] == 2) && k > 1)//同上呀宝{printf("2(%d)+", a[k]);}else if (a[k] == 0 || a[k] == 2){printf("2(%d)", a[k]);}k--;//下一个兄弟}else{printf("2(");search(a[k]);//这个兄弟不乖,送进去分解了再出来printf(")");if (k > 1)//这位兄台不是 最后一位(k == 1)就得输出 +; {printf("+");}k--;//下一个兄弟继续来啊}}
}
int main()
{int n = 0;cin >> n;search(n);return 0;
}

P1010 [NOIP1998 普及组] 幂次方相关推荐

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

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

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

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

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

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

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

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

  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=2^7+2^3+2^0 同时约定方次用括号来表示,即 a^b可表示为a(b). 由此可知,137 可表示为 2(7)+2(3)+2(0 ...

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

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

最新文章

  1. 对于fmri的设计矩阵构造的一个很直观的解释-by 西南大学xulei教授
  2. 弱电工程室内外光纤敷设有哪些技术要求
  3. 介绍一个能开发简单SAP UI5应用的在线IDE:StackBlitz
  4. 数据产品-数据可视化工具Excel之数据透视表
  5. C#LeetCode刷题之#884-两句话中的不常见单词(Uncommon Words from Two Sentences)
  6. Opencore-黑苹果:外接4K显示器却只能选择2K或以下分辨率
  7. 多阶段决策求最优解----动态规划(Dynamic Programming)
  8. ubuntu mysql开发_Ubuntu下进行基于MySQL的JDBC的开发
  9. 一步步实现koa核心代码
  10. Ajax 加载数据 练习 自我有些迷糊了,写的大概请谅解 ^ _ ^
  11. Javascript封装
  12. Linear Regression 和 Logistic Regression的不同(对比)
  13. Abaqus单位制简述
  14. 关于BMC ipmi oem cmd和redfish
  15. Windows 7 SP1 语言包下载
  16. Nginx网站使用CDN之后禁止用户真实IP访问的方法
  17. mac os 录屏快捷键_免费的录屏软件有哪些?不限制时长的录制软件
  18. 在Proteus上进行LED流水灯的仿真
  19. c语言 节日,农历阳历之间转换和节气节日查询C语言编程
  20. linux读取外接硬盘。bash: cd: too many arguments

热门文章

  1. 微信朋友圈广告如何投放?
  2. Java_按照指定的日期创建 Date对象
  3. 【从零单排HBase 02】全面认识HBase架构(建议收藏)
  4. 4000字全面了解小红书数据平台工程师(实时方向)社招面试内容
  5. docker镜像原理
  6. 必须重视BCHC BitCherry分布式区电商新时代正在到来
  7. 记一次入侵XP系统的经历
  8. 淘宝网的实习生笔试题以及经历--2011 4 1(转载请注明出处,即原创网址)
  9. C语言初阶小练习(10)
  10. java语言基于springboot+vue+elementUI 毕业生实习管理系统-#计算机毕业设计