洛谷-P1010 幂次方_辰景的博客-程序员秘密

技术标签: 洛谷  算法  

题目描述

任何一个正整数都可以用 22 的幂次方表示。例如 137=2^7+2^3+2^0137=27+23+20。

同时约定方次用括号来表示,即 a^bab 可表示为 a(b)a(b)。

由此可知,137137 可表示为 2(7)+2(3)+2(0)2(7)+2(3)+2(0)

进一步:

7= 2^2+2+2^07=22+2+20 ( 2^121 用 22 表示),并且 3=2+2^03=2+20。

所以最后 137137 可表示为 2(2(2)+2+2(0))+2(2+2(0))+2(0)2(2(2)+2+2(0))+2(2+2(0))+2(0)。

又如 1315=2^{10} +2^8 +2^5 +2+11315=210+28+25+2+1

所以 13151315 最后可表示为 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)。

输入格式

一行一个正整数 nn。

输出格式

符合约定的 nn 的 0,20,2 表示(在表示中不能有空格)。

输入输出样例

输入 #1复制

1315

输出 #1复制

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

说明/提示

对于 100\%100% 的数据,1\le n\le 2\times 10^41≤n≤2×104。

 

分析:

这题没什么难的,就是考察递归,处理好细节就行

对于输入的数n,先把n拆分成2(n1)+2(n2)+2(n3)+....的形式,然后再去拆分n1,n2,拆分n1,n2的时候调用的函数就是拆分n的函数,在这里完成了递归,我的代码里是通过devide函数来完成的,还有个函数firstnum是求n1,n2.....的,处理好1和2的表示方法就可以了

上AC代码:

#include<iostream>
#include<math.h>
using namespace std;
int n;
string devide(int k);
int firstnum(int k);
int main()
{
	cin>>n;
	string s;
	//s=devide(n);
	//for(int i=1;i<=s.size()-1;i++)
	//cout<<s[i];
	cout<<devide(n);
	return 0;
}
string devide(int k)
{
	string s;
	if(k==1)
	return "2(0)";
	if(k==2)
	return "2";
	while(k>1)
	{
		int big=firstnum(k);
		//cout<<"big is "<<big<<endl;
		if(big==0)
		s+="2(0)";
		else if(big==1)
		s+="2";
		else
		s+="2("+devide(big)+")";
		int temp=pow(2,big);
		//cout<<"temp is "<<temp<<endl;
		k=k-temp;
		if(k>1)
		s+="+";
	}
	if(k==1)
	s+="+2(0)";
	return s;
	
}
int firstnum(int k)
{
	int ans=0;
	if(k==1)
	return 0;
	
	while(k>1)
	{
		ans++;
		k=k/2;
	}
	return ans;
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43098069/article/details/107622998

智能推荐

有向图的最短路径(Floyd算法)_李跃东的博客-程序员秘密

最近在研究最短路径算法,使用java实现。原始数据是一共有6个点,他们之中任意2个点(i,j)之间的距离v(i,j)的数值如下面二位数组中所示,整体算法使用Java语言实现。class Floyd{ public static void main(String[] args){ int[][] a = new int[][] { { 0, 9, 4, 0, 0

数据库实验遇到的一些问题总结(2020-05-18)_数据库实验遇到的问题及解决方法_一个转专业的托尼的博客-程序员秘密

数据库实验遇到的一些问题总结1.修改表的数据及其数据类型我们有时候也会有看错的时候,但是你自己不知道的呀,点了确定,然后两个表的关系图连接的时候才显示两个键的数据类型不同,无法连接。然后我就打开每个表的列检查,就发现,Supplier表中的comment的数据类型错了,并非varbinary(199),而是varchar(199)。但是很多同学刚开始用不知道怎么修改,以为删除原来错误的表,再重新输入一次就行了。可是,在数据库系统中,你第一次错误的表是被保存了的,你删了重来,表名就不能用原表名了,得再

Ubuntu丨关于没有可用的软件包 open-vm-tools,但是它被其它的软件包引用了的问题_软件包open-vm-tools没有可安装候选_AXYZdong的博客-程序员秘密

在实现Windows与Ubuntu跨系统复制粘贴时,遇到关于没有可用的软件包 open-vm-tools,但是它被其它的软件包引用了的问题,包括问题来源和问题解决。

sqlcipher 数据库解密_diaokua8472的博客-程序员秘密

使用sqlcipher.exe 可以在输入密码后,查看加密数据库的内容。但是要编码查询数据库的内容,还要另寻方法。(相关的工具和库在我的百度网盘中)使用sqlcipher windows 命令工具注意 使用的工具也分版本,要与加密数据库的版本对应起来,否则查看不到表下载地址:对应2.xhttp://download.csdn.net/detail/zhan...

H5跳转小程序,微信开放标签wx-open-launch-weapp完整流程说明(踩坑之路)_传说中的钻石勇者的博客-程序员秘密

近来做一个H5跳转小程序的需求,一开始觉得没啥留到后面再做,结果前期的大意造成了后期不断的踩坑跳坑,对规则的不甚理解造成了这样的一种现状,为了后来的人不要和我一样,我就写了这篇讲一些具体会遇到的情况,大家如果遇到可以按照我这样做,我现在按照顺序一步一步的把我的踩坑之路讲述出来。具体问题如下:1.绑定域名;2.签名算法;3.IP白名单;4.config配置;5.标签的显示;一、首先是按照开放标签的步骤来,注意设置js安全域名对应的是小程序的公众号的安全域名,只有设置在那边才能开始第二步。二、引

八字算命api_八字排盘API接口_免费数据接口 - 极速数据_weixin_39758618的博客-程序员秘密

package api.jisuapi.bazi;import api.util.HttpUtil;import net.sf.json.JSONArray;import net.sf.json.JSONObject;public class Paipan {public static final String APPKEY = "your_appkey_here";// 你的appkeypubl...

随便推点

编译器开发(一)_xcszbdnl的博客-程序员秘密

好吧。在学习完编译原理之后终于自己做了一个编译器的前端。当然只是一个很简单的前端。会在接下来的日子里面去不断完善这个编译器前端,以后再写出一个后端出来。前端分为词法分析,语法分析和语义分析。语法的结构如下:程序>::= main()语句块>语句块>::= ‘{‘语句串>’}’语句串>::=语句>{;语句>};语句>::=赋值语句>|条件语句>|循环语句>赋值

IDEA使用Maven骨架创建项目,速度慢解决办法_B_TAEYANG的博客-程序员秘密

导致IDEA创建Maven项目慢的解决办法原因如下:IDEA根据maven archetype的本质,是在执行mvn archetype:generate命令,该命令执行时,需要指定一个archetype-catalog.xml文件。该命令的参数-DarchetypeCatalog,可选值为:remote,internal,local等,用来指定archetype-catalog.xml文

最近邻插值(nearest neighbor)-----python_最近邻内插_小苑同学的博客-程序员秘密

图像内插是在诸如放大、收缩、旋转和几何校正等任务中广泛应用的基本工具。从根本上来看,内插是用已知数据来估计未知位置的数值的处理。最近邻内插法(nearest neighbor):假设一幅大小为500×500像素的图像要放大到750×750像素。一种简单的放大方法是创建一个假想的750×750网格,它与原始图像有相同的间隔。然后将其收缩,使它准确地与原图像匹配。显然收缩后的750×750网格的像素间隔要小于原图像的像素间隔。为了对覆盖的每一个点赋以灰度值,我们在原图像中寻找最接近的像素,并把该像素的灰度赋给

多线程同步(二)_YUYOUFU的博客-程序员秘密

相对于Audio Player MIDlet应用程序,Bouncing Ball MIDlet应用程序相对复杂一点,它的主画面是运动的小球,而且有背景音乐,每个小球放在单独的线程里,背景音乐也是单开一个线程,所以说是一个相对复杂的多线程程序,很值得我们去学习。还是先来看程序,从程序中我们才能知晓作者的用心良苦,BBall.java public class BBall extends MI

Git - 从远程仓库中拉取指定分支到本地_git拉取远程分支到本地_王佳斌的博客-程序员秘密

请您根据场景,选择最合适的方案就好。一、克隆分支例如,从[email protected]:bitgk/sx-mall.git 远端仓库克隆 dev 分支。## git clone -b &lt;分支名&gt; &lt;远程仓库地址&gt;git clone -b dev [email protected]:bitgeek/sx-mall.git二、Fetch例如,从远端仓库拉取 dev 分支到本地。## git fetch origin &lt;分支名&gt;git fetch or.

【python|小乐趣儿】老照片修复神器_python老照片修复_Carol的测试之路的博客-程序员秘密

某天刷小red书发现可以将老照片修复成和刚拍的照片一样,看博主的视频,直呼也太神奇了。然后就根据博主推荐的小程序、app等注册试了试,oh,竟然要充money,哼,我就不信,我找不到免费的... 于是乎,就有了如下方法(腾讯开源项目),修复照片人脸还是很ok的,关键是不要钱,哈哈哈哈。

推荐文章

热门文章

相关标签