用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

任何一个正整数都可以用2的幂次方表示。

2019-07-30 作者:Playboy_lh举报

[c++]代码库

/*
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述
任何一个正整数都可以用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)
*/
#include<stdio.h>

void put(int num, int n);

int main()
{
	int num;
	scanf("%d", &num);
	put(num, 0);
}

void put(int m, int n)
//m为被分解的数,n为二进制位数,r为位数上的数值。 
{
	int r;
	if (m == 0)//m已经被分解完,返回 
	{
		return;
	}
	r = m % 2;
	m = m / 2;
	put(m, n + 1);
	if (m != 0 && r != 0)
		//如果m不为0且r不为0证明这不是第一个2的幂次方,输出+
	{
		printf("+");
	}
	if (r == 1)
	{
		if (n == 0)
		{
			printf("2(0)");
		}
		else if (n == 1)
		{
			printf("2");
		}
		else if (n == 2)
		{
			printf("2(2)");
		}
		else
		{
			printf("2(");
			put(n, 0);
			//如果指数不能用2(0),2,2(2)表示则继续分解
			printf(")");
		}

	}
}

[代码运行效果截图]


任何一个正整数都可以用2的幂次方表示。


分享到:
更多

网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。