【题目链接】

ybt 1208:2的幂次方表示
OpenJudge 2.2 8758:2的幂次方表示
洛谷 P1010 [NOIP1998 普及组] 幂次方

【题目考点】

1. 递归

【解题思路】

  • 递归问题:将数字k转为2的幂次方表示的字符串
  • 递归关系:
    二进制按位权展开式形式如下:
    k=d0∗20+d1∗21+...+dk∗2kk = d_0*2^0+d_1*2^1+...+d_k*2^kk=d0​∗20+d1​∗21+...+dk​∗2k
    将数字k转为二进制数,即为在二进制下作数字拆分,与十进制数字拆分类似。

    例:下面的代码为将数字k转为二进制并逆序输出

    for(int a = k; a > 0; a /= 2)cout << a%2;
    

    拆分出的第0个数字为d0d_0d0​,位权为202^020,第1个数字为d1d_1d1​,位权为212^121…,第i个数字为did_idi​,位权为2i2^i2i。
    将k在二进制下作数字拆分,如果第i次拆分出的数字did_idi​为0,则略过。如果第i次拆分出的数字did_idi​不为0,则看i的值。

    • 如果i为0,那么这一项为2(0)
    • 如果i为1,那么这一项为2
    • 如果i大于1,那么这一项为2(s),括号里的字符串s为将数字i转为2的幂次方表示的字符串,可以通过递归调用本函数得到。
  • 递归出口:
    • 如果i为0或i为1的情况就是递归出口。

【题解代码】

解法1:递归

#include<bits/stdc++.h>
using namespace std;
string solve(int k)
{string s;for(int a = k, i = 0; a > 0; a /= 2, i++)//其中一项为a%2*2^i{if(a%2 == 1){if(i == 0)s = "2(0)+" + s;//逆序构造字符串,需要将新得到的字符串接在s的前面 else if(i == 1)s = "2+" + s;elses = "2(" + solve(i) + ")+" + s;                }}s.pop_back();//如果如上述方法构造字符串,最后末尾会多一个"+",将这个"+"删掉。return s;
}
int main()
{int n;cin >> n;cout << solve(n);return 0;
}

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

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

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

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

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

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

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

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

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

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

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

  6. 洛谷 P1010 [NOIP1998 普及组] 幂次方 C++

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

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

    def f1(x):# 获取一个数的幂 137 list = [7 3 0]str1 = bin(x)[2:][::-1]list1 = []for i in range(len(str1)-1,-1 ...

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

    题目 C++: #include<bits/stdc++.h> using namespace std; string run(int x,int i=0,string s=string( ...

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

    由于有的数字不需要前面那个括号,所以你得先判断如 3=2+2(0); 如果不判断那么3=2(2(0))+2(0); 自己设计的真是菜 从次数判断要不要加括号,加括号是取决于次数,而不是这个数本身 // ...

最新文章

  1. MyEclipse设置JSP页面默认编码方式
  2. 【docker】【Gitlab】gitlab中clone项目时,IP地址是一串数字(内网Gitlab的IP地址不正确)的问题解决...
  3. AJAX——AJAX请求递归
  4. scrt如何切换成英文版_英文版SecureCRT显示乱码解决
  5. 单元格内容分列多行_姓名太多,放在一列打印时浪费纸张,可以分成多行多列打印...
  6. 《数据结构C语言版》——线性表详解,你一定能够看得懂学得会的宝典
  7. 以太网的分层架构_以太网矩阵(Ethernet Fabric)简介
  8. pd 生成mysql数据库sql时加上备注
  9. linux7.5有哪些版本,CentOS Linux 7.5正式发布,基于Red Hat Enterprise Linux 7.5
  10. selenium实战爬取股票
  11. 深恶痛绝的No mapping found for HTTP request with URI
  12. 浅谈产品原型制作与设计方法
  13. 在ros中使用glog
  14. 程序员求职简历,项目经验怎么写?免费修改简历并提供简历模板
  15. Vue,React,微信小程序,快应用,TS 和 Koa 一把梭
  16. 实体字段校验@NotNull、@NotEmpty、@NotBlank
  17. 网易云易盾关于极验所述问题的致歉和说明
  18. QT关于界面常用设置
  19. 华为交换机console密码破解.不删除配置
  20. 浅谈汽车和交通设备行业的aps软件解决方案

热门文章

  1. Android之sqlite的使用 (转载)
  2. Tomcat学习--配置tomcat
  3. 终于有人把自然语言处理、机器学习、深度学习和AI讲明白了
  4. 图灵奖得主Bengio:深度学习让AI得以推理和想象,不会被取代
  5. 武书连2019中国大学排行榜公布:浙大排名超越北大
  6. 方程组的直接解法和迭代法 python_基于任务驱动的翻转课堂线上教学 ——以《解二元一次方程组复习课》为例...
  7. 漫话:如何给女朋友解释为什么计算机从0开始计数,而不是从1开始?
  8. Arthas - Java 线上问题定位处理的终极利器
  9. Linux基本操作——Linux磁盘基本概念
  10. svn的备份还原(一)