• P1010 幂次方


    大致题意:

    • 任何一个正整数都可以用2的幂次方表示,
    • 同时约定次方用括号来表示,
    • 并且把每一个指数都写成2的幂次方。

    基本思路:

    • 深搜大气!深搜威武!深搜我爱你牛逼!
    • 咳咳,不中二了。
    • dfs(m)解决的就是m表示的2的幂次方。
    • 然后一层层套到最后就ok啦。

    Code:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <queue>
    #include <stack>
    #include <map>
    #include <set>
    #include <list>
    using namespace std;
    #define R read()
    #define GC getchar()
    #define ll long long
    #define ull unsigned long long
    #define INF 0x7fffffff
    #define LLINF 0x7fffffffffffffff
    ll read(){
        ll s=0,f=1;
        char c=GC;
        while(c<'0'||c>'9'){if(c=='-')f=-f;c=GC;}
        while(c>='0'&&c<='9'){s=s*10+c-'0';c=GC;}
        return s*f;
    }
    int n;
    void dfs(int m){
        for(int i=14;i>=0;--i){//因为2^15大于n的最大数据,所以从14开始。至于为什么从大到小,因为根据题目描述都是从大的开始加的……
            int t=pow(2.0,i);//求出2^i次方(至于为什么要写成浮点数,因为写整数vscode会报错……
            if(t<=m){//如果可以剪掉
                if(i==0){//2^0就是2(0)
                    printf("2(0)");
                }else if(i==1){//2^1就是2
                    printf("2");
                }else{//因为2^i(i≠0,i≠1)的i需要拆分,直接套下去就好了
                    printf("2(");
                    dfs(i);
                    printf(")");
                }
                m-=t;//减去ta
                if(m!=0){//如果等于0就说明已经弄完了,不用输出'+'了,不等于0就需要输出'+'
                    printf("+");
                }
            }
        }
    }
    int main(){
        n=R;
        dfs(n);
        return 0;
    }
    
  • 相关阅读:
    构建工具系列二--Grunt
    构建工具系列一--Travis-cli
    Windows平台下如何使用node.js显示系统盘符
    【译文】采用chrome的DevTool中TimeLine和profile工具提升Web app性能
    浏览器重绘和重排
    迁移oracle数据库至新分区
    模拟app上商品详情点击图片放大并且可以切换大图
    JavaScript 复制内容到剪贴板
    原生js ajax
    原型与原型链
  • 原文地址:https://www.cnblogs.com/FUXyao/p/12885027.html
Copyright © 2020-2023  润新知