结题报告
2020-02-07 16:00:48来源:博客园 阅读 ()
结题报告
题目:点此。
题意描述:
任何一个正整数都可以用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)
思路:
使用递归,如果要输出的是2,直接输出2;如果是1,输出2(0)。
计算log2n(我的up_pow函数),并存储。
先输出一个2,如果i也就是㏒2n不是一,输出左括号“(”,递归调用i,再输出右括号“)”。
如果还有剩余(n-2i!=0)输出+,递归调用,然后结束函数。
再main函数中,只需读入n,然后调用函数即可。
犯的错误:
- 快速幂没加返回值。
- 有很多地方应是i不是i-1。
- 快速幂函数没加边界条件。
收获:
- 要仔细,不要漏东西。
代码:
#include <iostream> using namespace std; int quick_pow(int index,int r){ if(r==0){ return 1; } if(r==1){ return index; } int data=1; if(r%2!=0){ data=index; } int type=quick_pow(index,r/2); data*=type*type; return data; } int up_pow(int max){ int index=1,number=0; while(index<max){ number++; index<<=1; } if(index>max){ number--; } return number; } int f(int n){ if(n==1){ cout << "2(0)"; return 0; } if(n==2){ cout << "2"; return 0; } int i=up_pow(n); cout << "2"; if(i!=1){ cout << "("; f(i); cout << ")"; } n-=quick_pow(2,i); if(n!=0){ cout << "+"; f(n); } return 0; } int main(){ int n; cin >> n; f(n); return 0; }
原文链接:https://www.cnblogs.com/eason66-blog/p/P8758.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:结题报告
- 2019.3.14解题报告&补题报告 2020-03-22
- 结题报告--hih0CoderP1041 2020-03-17
- 结题报告--P5551洛谷--Chino的树学 2020-03-13
- 结题报告--洛谷P3915 2020-03-13
- 结题报告 2020-03-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash