NOIP1998普及组复赛第二题 贰的幂方 解题报告

2023-11-17

【问题描述】  
  
任何一个正整数都可以用 2 的幂次方表示。例如:137=27+23+20。
  在这里我们约定次方用括号来表示,即 ab 可表示为 a(b)。
  由上面叙述可知:137 又可以表示为 2(7)+2(3)+2(0)。进一步:7=22+2+20=2(2)+2+2(0)(21用2表示)。3=2+20=2+2(0)。所以最后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 的 0,2 表示(在表示中不能有空格)。


 【输入样例】   
   
137
1315


【输出样例】  
   
2(2(2)+2+2(0))+2(2+2(0))+2(0)
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)


【数据范围】  
   
n <= 2^31

 【来源】  
  
NOIP1998普及组复赛第二题


 解题思路:本题的主要算法为分治算法,对于每输入一个数,我们可以先把它分解为2的幂方的和,然后将指数大于2的继续分解。需要注意的是,本题中n的范围最大为2^31,超过了int的范围(2^31-1),所以n定义为long long,并且,在计算2^31时,要么直接用1<<31然后强制类型转换为long long,要么可以先计算出1<<30,再将得到的值乘2。


#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=35;
long long N;  //定义为long long
void solve(long long x)
{
	int ok=0;  //用来记录是否已经输出过值,以控制输出'+'
	for(int i=31;i>=0;i--)
	{
		long long k;
		if(i<31)  k=1<<i;
		else  //计算2^31
		{
			k=1<<30;
			k=k*2;
		}
		if(x>=k && i>2) 
		{
			if(ok==1)  printf("+");  
			printf("2(");
			solve(i);  //指数大于2,继续分解
			printf(")");
			ok=1;
			x-=k;
		}
		if(x>=k && i==2)  
		{
			if(ok==1)  printf("+");
			printf("2(2)");
			ok=1;
			x-=k;
		}
		if(x>=k && i==1)
		{
			if(ok==1)  printf("+");
			printf("2");
			ok=1;
			x-=k;
		}
		if(x>=k && i==0)
		{
			if(ok==1)  printf("+");
			printf("2(0)");
			ok=1;
			x-=k;
		}
	}
}
int main()
{
	freopen("48.in","r",stdin);
	//freopen("48.out","w",stdout);
	while(cin>>N)  
	{
		solve(N);
		printf("\n");
	}
	return 0;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NOIP1998普及组复赛第二题 贰的幂方 解题报告 的相关文章

随机推荐

  • 微信小程序 - 判断一个经纬度是否在一个多边形区域内

    功能描述 最近公司做了一个定位打卡的小程序 需要判断用户的经纬度是否在一个闭合的多边形区域内 在区域内允许打卡 否则提示 不再打卡范围 由于腾讯地图小程序SDK没有提供相关功能 所以需要自己手写造轮子 实现思路 首先已知一个用户坐标 x0
  • python函数式编程例子-python之面向过程,函数式编程,面向对象浅析

    python编程有面向过程 面向函数 面向对象三种 那么他们区别在哪呢 这个问题 让我想起我在学习编程的时候 我的老师给我举的例子 分享给大家 面向过程就是将编程当成是做一件事 要按步骤完成 比如煮咖啡这件事 先拿一定量的咖啡豆 然后磨成粉
  • Vue----双向绑定指令

    文章目录 3 7 双向绑定指令 3 7 1 v model 指令的修饰符 3 7 双向绑定指令 vue提供了 v model双向绑定指令 用来辅助开发者在 不操作DOM 的前提下 快速 获取表单数 据
  • 使用idea自带的maven插件配置镜像

    一 选择idea自带maven路径 setting文件的位置选择 二 打开setting文件 三 修改maven的镜像
  • 华为HCIE云计算之Fusion Access桌面云

    华为HCIE云计算之Fusion Access桌面云 一 Fusion Access介绍 二 华为Fusion Access架构 1 Fusion Access桌面云解决方案逻辑架构 2 FusionSphere云平台架构 三 Fusion
  • 【无人机分配】一种无人机实时最优任务分配模型附matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab仿真内容点击 智能优化算法 神经网络预测 雷达通信 无线传感器 信号处理 图像
  • 不能看到共享的服务器文件夹,服务器不能共享文件夹

    服务器不能共享文件夹 内容精选 换一换 VPC为弹性云服务器构建隔离的 用户自主配置和管理的虚拟网络环境 提升用户云中资源的安全性 简化用户的网络部署 使用弹性文件服务时 文件系统和云服务器归属于同一VPC下才能文件共享 VPC可以通过网络
  • Java发送HTTP的get,post请求(JSON)

    import net sf json JSONObject import org apache commons httpclient import org apache commons httpclient methods GetMetho
  • 2020-09-06

    Elasticsearch Elasticsearch 简称ES 是一个可分布式的实时搜索和分析引擎 一个建立在全文搜索引擎 一个建立在全文搜索引擎Apache Lucence基础上的搜索引擎 它不仅可以进行全文搜素 还可以进行以下工作 分
  • centos7 Docker化应用体验

    centos7 Docker化应用体验 环境分析 WordPress运行环境需要如下软件的支持 PHP 5 6 或 更新版本 MySQL 5 6 或 更新版本 Apache 和 mod rewrite 模块 下载应用镜像 下载mariadb
  • RobotFramework-ride自动化操作教程

    一丶启动robotframework 启动RIDE 打开用例文件 找到文件位置 gt 选择文件 查看资源文件 确保用例所需资源文件当前目录都存在 三 用例编写 执行 新增用例 2 执行用例 勾选要执行的用例 点击run tests 或者 F
  • 浅谈漏洞及其分类

    浅谈漏洞及其分类 一 漏洞概念 漏洞是指一个系统上硬件 软件 协议等具体实现或系统安全策略上存在的弱点或缺陷 系统对特定威胁攻击或危险事件的敏感性 或进行攻击的威胁作用的可能性 这些缺陷 错误或不合理之处可能被有意或无意地利用 可以使攻击者
  • python中unexpected indent报错的解决办法

    python中unexpected indent报错的解决办法 在我们初步学习pyton的时候 由于对python语言的学习掌握不充分 则会导致所编写的代码 运行时候报错 比如 容易报错的unexpected indent问题 下面举例说明
  • Mybatis多对多查询+PageHelpler分页问题

    多对多查询 说明 tb user用户表 tb role角色表 tb user role用户角色关联表 实现表数据的多对多查询并返回 使用PageHelper对查询结果分页 用户表 Data NoArgsConstructor AllArgs
  • 想学好python?这18条学习技巧你一定要掌握。能甩别人两条街。

    在这篇文章中 我们将讨论最常用的python技巧 大多数这些技巧都是我在日常工作中使用过的简单的Trick 我觉得好东西就是要拿出来和大家一起分享 闲话少说 我们直接开始吧 处理用户的多个输入 有时我们需要从用户那里获得多个输入 以便使用循
  • 手把手教你在Tensorflow实现BEGAN 达到惊人的人脸图像生成效果

    导读 本文是基于谷歌大脑 Google Brain 发表在 arXiv 的最新论文 BEGAN 边界平衡生成对抗网络 实现的 该工作针对GAN 面临的一些难题 例如如何衡量收敛 如何控制分布多样性以及如何维持鉴别器和生成器之间的平衡等问题
  • Lock锁

    Lock实现提供比使用synchronized方法和语句可以获得的更广泛的锁定操作 它们允许更灵活的结构化 可能具有完全不同的属性 并且可以支持多个相关联的对象Condition 1 传统的synchronized package cn d
  • c语言(从入门到放弃?NONONO,LET我们一步一步刨析,会发现其中蕴含的乐趣)

    大家刚入门的时候通常会觉得c语言怎么怎么难学 听别人说指针多么多么难懂 深入学习的人的头发如何如何的稀少 然而我们只需要一步一步了解 一步一步刨析 会发现学习c语言也是具有许多乐趣的 接下来我们正式展开对C语言的简单了解咯 目录 一 让我们
  • Qt-信号和槽中使用自定义数据类型

    QT如果要在信号中使用自定义类型 需要首先调用qRegisterMetaType函数 语句类似 qRegisterMetaType
  • NOIP1998普及组复赛第二题 贰的幂方 解题报告

    问题描述 任何一个正整数都可以用 2 的幂次方表示 例如 137 27 23 20 在这里我们约定次方用括号来表示 即 ab 可表示为 a b 由上面叙述可知 137 又可以表示为 2 7 2 3 2 0 进一步 7 22 2 20 2 2