zoukankan      html  css  js  c++  java
  • 集训作业 洛谷P1010 幂次方

    这个……

    这个题看上去有点难的样子。

    仔细看看,感觉有点简单。啊,是递归啊,正经的看一看,好像是把一个数分成2的几次方的和。

    然后余数和比他小的最大的2的次方数如果不是2的一次方或者2的0次方,就继续递归。

    仔细一想貌似很简单,只不过余数是在括号外面,商是在里面的,这种小事稍微写写就可以了。

    直接代码吧,这题除了题意有点复杂以外还行……

    #include<iostream>
    #include<cstdio>
    using namespace std;
    long long m;
    long long sz[20]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768};//电脑打的表,这个比无数次pow快多了
    void dg(int n)
    {
    	while(n!=0)//这整个循环是把n的余数继续拆。
    	{
    		for(int i=15;i>=0;i--)//这个是查看比他小的最大的2的次方数
    		{
    			if(sz[i]<=n)
    			{
    				n-=sz[i];
    				if(i==1)//这说明n是2或者3,反正都不需要括号
    				{
    					cout<<"2";
    				}else if(i==0)//这说明n就是1
    				{
    					cout<<"2(0)";
    				}else//这个需要括号,继续继续这里继续的是次方数
    				{
    					cout<<"2(";
    					dg(i);
    					cout<<")";
    				}
    				break;
    			}
    		} 
    		if(n!=0)//后面还有余数,写个+
    		{
    			cout<<"+";
    		}
    	}
    }
    int main()
    {
    	scanf("%lld",&m);
    	dg(m);
    	return 0;
    }
    

    这个还是很好理解的吧,不理解的请去看看样例读读题。

  • 相关阅读:
    linux下安装mysql
    python -- 相对路径、绝对路径、以及路径的获取
    Jekyll 使用入门
    argparse 使用指南
    requests快速入门
    Pandoc中的Markdown语法
    利用Github Pages建立仓库“门面”
    Anaconda使用入门
    Python连接SQL Server数据库
    SQL Server 部署CLR程序集错误`6218`
  • 原文地址:https://www.cnblogs.com/lichangjian/p/12888869.html
Copyright © 2011-2022 走看看