zoukankan      html  css  js  c++  java
  • 【洛谷】P1010 幂次方(分治+递归)

    题目链接

    题目描述

    任何一个正整数都可以用 2 的幂次方表示。例如

    137=2^7+2^3+2^0

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

    由此可知, 137 可表示为:

    2(7)+2(3)+2(0)

    进一步:

    7= 2^2+2+2^0(2^1用2表示),并且

    3=2+2^0

    所以最后 137可表示为:

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

    又如:

    1315=2^10 +2^8 +2^5 +2+1

    所以 1315 最后可表示为:

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

    输入输出格式

    输入格式:

    一个正整数 n(n≤20000)。

    输出格式:

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

    输入输出样例

    输入样例#1: 复制

    1315

    输出样例#1: 复制

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

    分治+递归

    AC代码:

     1 #include<iostream>
     2 #include<sstream>
     3 #include<algorithm>
     4 #include<string>
     5 #include<iomanip>
     6 #include<vector>
     7 #include<cmath>
     8 #include<stack>
     9 using namespace std;
    10 void fun(int i)//将i分解
    11 {
    12     if(i==0) 
    13     {
    14         cout<<"0";return;
    15     }
    16     else if(i==1) 
    17     {
    18         cout<<"2(0)";return;
    19     }
    20     else if(i==2) 
    21     {
    22         cout<<"2";return;
    23     }
    24     else 
    25     {
    26         int t=0;
    27         while((1<<t)<=i) t++;
    28         t-=1;
    29         if(t!=1)
    30         {
    31             cout<<"2(";
    32                 fun(t);
    33                 cout<<")";
    34         }
    35         else cout<<"2";
    36             int res=i-(1<<t);
    37             if(res!=0) 
    38         {
    39             cout<<"+";fun(res);
    40         }
    41     }
    42 }
    43 int main()
    44 {
    45     int n;
    46     cin>>n;
    47     fun(n);
    48 }
    49  
    View Code
  • 相关阅读:
    基于单片机定时器---年月日时分秒的算法
    按位查询算法---基于Perimiter Sensor
    MFC File crc 计算
    二叉树的层次遍历

    动态规划
    贪心算法 动态规划
    爱信息图床测试
    前端小白的个人习惯和笔记(一)
    过年了,是不是应该写点代码祝福别人
  • 原文地址:https://www.cnblogs.com/wangzhebufangqi/p/12796169.html
Copyright © 2011-2022 走看看