本文主要是介绍[笔记][中国大学mooc][程序设计与算法(二) 算法基础][递归] 2的幂次方表示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
任何一个正整数都可以用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)
代码
#include<iostream>
using namespace std;
void function(int number){if(number){bool exponent[15];int ptr=0;int last;//短除法分解while(number){exponent[ptr++] = (number%2==1);number /= 2;}//标记最小的指数for(int cnt=0; cnt<15; cnt++) if(exponent[cnt]){last=cnt; break;}//维护指数表for(; ptr<15; ptr++) exponent[ptr] = false;for(int cnt=14; cnt>=0; cnt--){if(exponent[cnt]){//递归部分if(cnt > 1){cout << "2("; function(cnt); cout << ")";}else if(cnt == 1) cout << "2";else cout << "2(0)";//如果是最后一项,不输出加号if(cnt != last) cout << '+';}}}
}
int main(){int a;cin >> a;function(a);return 0;
}
这篇关于[笔记][中国大学mooc][程序设计与算法(二) 算法基础][递归] 2的幂次方表示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!