【题目描述】

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

137=27+23+20

同时约定方次用括号来表示,即ab可表示为a(b)。由此可知,137可表示为:

2(7)+2(3)+2(0)

进一步:7=22+2+20(21用2表示)

3=2+20

所以最后137可表示为:

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

又如:

1315=210+28+25+2+1

所以1315最后可表示为:

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

【输入】

一个正整数n(n≤20000)。

【输出】

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

【输入样例】

137

【输出样例】

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

思路:

这道题的大体思路就是把所输入的数全部用2进制数来表示,既然要用2进制的数把输入的数拆分,就想到了用递归函数。

①先创建一个数组a,数组中的数的位置分别是2的几次幂。因为输入的数n小于等于20000也就是小于2^15,所以就创建数组15个数。

②先找出数组a中小于n的最大的数的位数k,之后对k分析。

③如果k=0、1、2分别输出2(0)、2(1)、2(2)。

④如果k>2的话就说明输出的数不能直接表达出来了,就要再次分解,所以先输入2(),括号里的数需要再次分解,递归函数就可以了。

⑤考虑完分解的第一个数之后,就开始对第二个数开始分析,如果存在第二个数就输出+,讲n-第一个数的值放到函数中。随后依次类推到没有余数就结束了。

代码:

#include <iostream>
int a[15];
using namespace std;
void two(int n)
{int k;for (k = 14;k>=0;--k){if (a[k] <= n) break;}if (k == 0)  cout << "2(0)";else if (k == 1) cout << "2";else if (k == 2) cout << "2(2)";else {cout << "2(";two(k);cout << ")";}if (a[k] < n){cout << "+";two(n - a[k]);}}
int main() {a[0] = 1;for (int i = 1;i < 15;++i){a[i] = 2 * a[i - 1];}int n;cin >> n;two(n);return 0;
}

C++ 2的幂次方表示相关推荐

  1. HashMap 的长度为什么是 2 的幂次方?

    HashMap 的长度为什么是 2 的幂次方? 为了能让HashMap存取高效,尽量减少碰撞,需要将散列表的数据分配均匀.使用HashMap查询或插入数据时,需要先对数组长度取模运算,index = ...

  2. 将整数拆分为2的幂次方

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

  3. 08、求x的y的幂次方的最后3位数——循环

    求x的y的幂次方的最后3位数 求x的y的幂次方的最后3位数 程序代码如下: /*2017年3月12日14:07:05功能:程序求x的y的幂次方的最后3位数*/#include"stdio.h ...

  4. 快速判断一个数是否是4的幂次方,若是,并判断出来是多少次方! .

    将4的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1(1在奇数位置),并且1后面跟了偶数个0: 因此问题可以转化为判断1后面是否跟了偶数个0就可以了. 4的整数次幂的二进制数都为 ...

  5. 【数据结构与算法】之判断一个整数是否是 4 的幂次方的高逼格算法

    一.题目要求 给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方. 示例一: 输入: 16输出: true 示例二: 输入: 5输出: false 进阶: 你能不使用循环 ...

  6. 8758:2的幂次方表示

    8758:2的幂次方表示 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 任何一个正整数都可以用2的幂次方表示.例如: 137=27+23+20 同时约定方次 ...

  7. Java递归例子——求x的y幂次方

    假设n的值大于0. 一:源程序: View Code package one; public class RecursionTest { /** * @param args */ public sta ...

  8. 2.2 基本算法之递归和自调用函数 8758 2的幂次方表示 python

    http://noi.openjudge.cn/ch0202/8758/ """ 2.2 基本算法之递归和自调用函数 8758 2的幂次方表示 python http:/ ...

  9. 快速判断一个数是否是2的幂次方

    public class Test {public static void main(String[] args) {int num = 10;if (0 == (num & (num - 1 ...

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

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

最新文章

  1. 用化学的方法分类键盘和鼠标
  2. bzoj1560:[JSOI2009]火星藏宝图(斜率优化)
  3. 高级同步器:可重用的同步屏障Phaser
  4. C# —— 深入理解委托类型
  5. IDEA使用(03)_git撤回(已经commit未push的)操作
  6. 从spring管理的datasource中获取connection
  7. 美团刚做起网约车,滴滴就送外卖?你们倒真是相爱相杀
  8. dojo动态创建widget
  9. Python 求峰值
  10. Qt信号与槽机制详解
  11. 单机游戏计时器防zuo弊解决方案
  12. 计算机ip本地连接,电脑ip地址设置:本地连接ip设置方法
  13. 为什么建议将成员属性设置为私有
  14. python三重积分_蒙特卡罗方法。三重积分。Python。“+”的操作数父级不受支持...
  15. 《树莓派项目实战》第九节 使用PCF8591模块和光敏电阻传感器测量光照强度
  16. 【web安全学习篇1】VBS脚本基础编写总结
  17. MapReduce之多MapReduce执行
  18. 大脑和小脑——规划和执行
  19. Angluar WARNING System.import() is deprecated and will be removed soon. Use import() instead
  20. 用Python分析韩国女团喜欢什么单词

热门文章

  1. C#制作高仿360安全卫士窗体(四)- 水晶按钮
  2. cefsharp读取exe html,wpf中使用cefsharp加载本地html网页并实现cs和js的交互并且cefsh...
  3. app.vue 跳转页面_「案例分析」APP关键页面UX优化拆解—以珍爱网APP为例
  4. deepin 商店连不上网_有妙招|win10连不上网怎么办?
  5. Java的笔记(一)
  6. 【操作系统③】——进程及其实现【运行态 就绪态 等待态等 PCB 进程控制块 进程要素】
  7. JavaScript 事件 onblur 与 onfocus 区别
  8. Linux系统中使任务后台挂起不停止的命令
  9. docke 安装rap_Docker搭建RAP2
  10. 如何让多个版本的Python和谐共处