首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >试题 算法训练 幂方分解

试题 算法训练 幂方分解

作者头像
GeekLiHua
发布2025-01-21 14:22:10
发布2025-01-21 14:22:10
1630
举报
文章被收录于专栏:JavaJava

试题 算法训练 幂方分解

资源限制 内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述   任何一个正整数都可以用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表示(在表示中不能有空格)

提交代码

代码语言:javascript
复制
#include <iostream>
#include <cstring>
#include <math.h>
using namespace std;

int  j,k,t;
void fun(int n)
{
	int i=0,ans=1,k=n;
	while(n)
	{
		n/=2;
		ans*=2;
		i++;
	}
	t=i-1;
	ans/=2;
	if(t>2)
	{
		cout<<2<<"(";
		fun(t);
		cout<<")";
	}
	else if(t==2||t==0)
	{
		cout<<2<<"("<<t<<")";
	}
	else if(t==1)
	{
		cout<<2;
	}
	n=k-ans;
//	cout<<ans<<n;
	if(n>0)
	{
		cout<<"+";
		fun(n);
	}

}

int main()
{
	int n;
	cin>>n;
	fun(n);
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 试题 算法训练 幂方分解
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档