信息学奥赛一本通 1208:2的幂次方表示 | OpenJudge 2.2 8758:2的幂次方表示 | 洛谷 P1010 [NOIP1998 普及组] 幂次方
【题目链接】
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为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 普及组] 幂次方相关推荐
- 洛谷P1010 [NOIP1998 普及组] 幂次方
文章目录 前言 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 [数据范围] 代码 解析 结尾 前言 在做完洛谷P1010 [NOIP1998 普及组] 幂次方这道题之后,我 ...
- 洛谷——P1010 [NOIP1998 普及组] 幂次方
P1010 [NOIP1998 普及组] 幂次方 题目描述 任何一个正整数都可以用 22 的幂次方表示.例如 137=27+23+2^0137=27+23+20. 同时约定方次用括号来表示,即 a^b ...
- 洛谷P1010 [NOIP1998 普及组] 幂次方 C语言/C++
[NOIP1998 普及组] 幂次方 题目描述 任何一个正整数都可以用 2 2 2 的幂次方表示.例如 $137=27+23+2^0 $. 同时约定方次用括号来表示,即 a b a^b ab 可表示为 ...
- 洛谷P1010 [NOIP1998 普及组] 幂次方题解
数论递归 题目描述 任何一个正整数都可以用2的幂次方表示.例如137=27+23+20. 同时约定方次用括号来表示,即ab可表示为 a(b). 由此可知,137可表示为2(7)+2(3)+2(0). ...
- 洛谷 P1010 [NOIP1998 普及组] 幂次方
题目链接 题目大意 任何一个正整数都可以用 2 的幂次方表示.例如 137=27+23+20.137=2^7+2^3+2^0.137=27+23+20. 输入一个整数n,用0和2的二进制表示该整数n. ...
- 洛谷 P1010 [NOIP1998 普及组] 幂次方 C++
题目描述 任何一个正整数都可以用 22 的幂次方表示.例如 137=2^7+2^3+2^0 同时约定方次用括号来表示,即 a^bab 可表示为 a(b)a(b). 由此可知,137137 可表示为 2 ...
- 洛谷 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 ...
- 洛谷P1010 [NOIP1998 普及组] 幂次方 题解
题目 C++: #include<bits/stdc++.h> using namespace std; string run(int x,int i=0,string s=string( ...
- [洛谷]P1010 [NOIP1998 普及组] 幂次方
由于有的数字不需要前面那个括号,所以你得先判断如 3=2+2(0); 如果不判断那么3=2(2(0))+2(0); 自己设计的真是菜 从次数判断要不要加括号,加括号是取决于次数,而不是这个数本身 // ...
最新文章
- MyEclipse设置JSP页面默认编码方式
- 【docker】【Gitlab】gitlab中clone项目时,IP地址是一串数字(内网Gitlab的IP地址不正确)的问题解决...
- AJAX——AJAX请求递归
- scrt如何切换成英文版_英文版SecureCRT显示乱码解决
- 单元格内容分列多行_姓名太多,放在一列打印时浪费纸张,可以分成多行多列打印...
- 《数据结构C语言版》——线性表详解,你一定能够看得懂学得会的宝典
- 以太网的分层架构_以太网矩阵(Ethernet Fabric)简介
- pd 生成mysql数据库sql时加上备注
- linux7.5有哪些版本,CentOS Linux 7.5正式发布,基于Red Hat Enterprise Linux 7.5
- selenium实战爬取股票
- 深恶痛绝的No mapping found for HTTP request with URI
- 浅谈产品原型制作与设计方法
- 在ros中使用glog
- 程序员求职简历,项目经验怎么写?免费修改简历并提供简历模板
- Vue,React,微信小程序,快应用,TS 和 Koa 一把梭
- 实体字段校验@NotNull、@NotEmpty、@NotBlank
- 网易云易盾关于极验所述问题的致歉和说明
- QT关于界面常用设置
- 华为交换机console密码破解.不删除配置
- 浅谈汽车和交通设备行业的aps软件解决方案
热门文章
- Android之sqlite的使用 (转载)
- Tomcat学习--配置tomcat
- 终于有人把自然语言处理、机器学习、深度学习和AI讲明白了
- 图灵奖得主Bengio:深度学习让AI得以推理和想象,不会被取代
- 武书连2019中国大学排行榜公布:浙大排名超越北大
- 方程组的直接解法和迭代法 python_基于任务驱动的翻转课堂线上教学 ——以《解二元一次方程组复习课》为例...
- 漫话:如何给女朋友解释为什么计算机从0开始计数,而不是从1开始?
- Arthas - Java 线上问题定位处理的终极利器
- Linux基本操作——Linux磁盘基本概念
- svn的备份还原(一)