幂方分解

问题描述

  任何一个正整数都可以用2的幂次方表示。例如:
  137=27+23+2
  同时约定方次用括号来表示,即ab 可表示为a(b)。
  由此可知,137可表示为:
  2(7)+2(3)+2(0)
  进一步:7= 22+2+2(21用2表示)
  3=2+2
  所以最后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>
int a[15]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384};
void divide(int n)
{
	if(n==0)  return ;
	if(n==1)  {printf("2(0)");return ;}
	if(n==2)  {printf("2");return ;}
	int i=14;
	while(a[i]>n&&i>=0) i--;
	printf("2");
	if(i>1)
	{
		printf("(");
		divide(i);
		printf(")");
	}
	n-=a[i];
	if(n) printf("+");
	divide(n);
}
int main()
{
	int N;
	scanf("%d",&N);
	divide(N); 
	return 0;	
}Code language: PHP (php)
 如未特殊声明,文章均为原创。
 本文标题:幂方分解
 本文链接:https://manwish.cn/article/%e5%b9%82%e6%96%b9%e5%88%86%e8%a7%a3.html

留下评论