您的位置:首页 > 其它

算法训练 幂方分解

2016-04-07 00:08 211 查看
问题描述

  任何一个正整数都可以用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表示(在表示中不能有空格)

#include <stdio.h>

void powerResolve(int num)
{
if(num == 3){
printf("2+");
printf("2(0)");
return;
}
if(num == 2){
printf("2");
return;
}
if(num == 1){
printf("2(0)");
return;
}
if(num == 0){
printf("0");
return;
}

int tempNum, count;

tempNum = 1;
count = 0;

while(tempNum < num){
tempNum <<= 1;
count ++;
}
if(tempNum != num){
tempNum >>= 1;
count --;
}

printf("2("),powerResolve(count),printf(")");
if(tempNum != num){
printf("+");
powerResolve(num - tempNum);
}

}

int main()
{
int N;

scanf("%d", &N);

powerResolve(N);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 递归