• P1010 幂次方 题解


    题目传送门

    https://www.luogu.com.cn/problem/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% 的数据,1<=n<=2*10^4。

    因为这题数据范围不大,对新手比较友好,本蒟蒻也不会写多高级的代码,直接手打数据应该最快了……

    话不多说,上代码……

    #include<iostream>
    #include<string>
    using namespace std;
    int x[15]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384};//因为n<=2*10^4,所以写到16384就够了
    string y[15]={"2(0)","2","2(2)","2(2+2(0))","2(2(2))","2(2(2)+2(0))","2(2(2)+2)","2(2(2)+2+2(0))",
    "2(2(2+2(0)))","2(2(2+2(0))+1)","2(2(2+2(0))+2)","2(2(2+2(0))+2+2(0))","2(2(2+2(0))+2(2))",
    "2(2(2+2(0))+2(2)+2(0))","2(2(2+2(0))+2(2)+2)"};//x[i]转换成y[i]该输出的字符串(无脑手打)
    void zhuan_huan(int s){
    for(int i=14;i>=0;i--){//因为n<=2*10^4,所以从2的14次方(即16384)开始判断
    if(s>=x[i]){
    s=s-x[i];
    cout<<y[i];
    if(s==0){
    return;
    }
    cout<<"+";
    return zhuan_huan(s);
    }
    }
    }
    int main(){
    int n;
    cin>>n;
    zhuan_huan(n);
    return 0;
    }

  • 相关阅读:
    .net百度编辑器的使用
    phpstudy远程连接mysql
    HDU-2389 Rain on your Parade
    HDU-2768 Cat vs. Dog
    HDU-1151 Air Raid
    HDU-1507 Uncle Tom's Inherited Land*
    HDU-1528/1962 Card Game Cheater
    HDU-3360 National Treasures
    HDU-2413 Against Mammoths
    HDU-1045 Fire Net
  • 原文地址:https://www.cnblogs.com/samuelx/p/12897962.html
Copyright © 2020-2023  润新知