2的幂次方表示(递归)
采用二进制数,从最高位到最低位依次转换。
一、问题描述
任何一个正整数都可以用2的幂次方表示。同时约定方次用括号来表示,即ab可表示为a(b)。例如:
137可表示为:
2(2(2)+2+2(0))+2(2+2(0))+2(0)
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表示(在表示中不能有空格)。
二、问题分析
第二次做这个题目了,可解题时还是不流畅。最开始纠结的地方是用二进制数来求解好,还是除2取余法好。良久,最后选择了二进制数,从最高位开始,依次对每一位进行转换,直到最低位转换完毕。
于是,首先需要一个函数确定二进制数的位数,以便从最高位开始转换。这里规定最低位为第1位
int getlen(int i)
{
//计算二进制数n的位长度
int len = 0;
while (i)
{
i >>= 1;
++len;