zoukankan      html  css  js  c++  java
  • 洛谷P1010 幂次方

    题目描述

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

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

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

    由此可知,137137可表示为:

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

    进一步:

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

    3=2+2^0

    所以最后137137可表示为:

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

    又如:

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

    所以13151315最后可表示为:

    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<bits/stdc++.h>
     2 using namespace std;
     3 int n;
     4 void dfs(int k) {
     5     int y;
     6     y = log2(k);//找到比n小的2次方中最大的 
     7     if(y == 0) cout << "2(0)";//终止条件 
     8     if(y == 1) cout << "2";//终止条件 
     9     if(y > 1) {//如果没有到边界,继续递归下去 
    10         cout << "2(";
    11         dfs(y);
    12         cout << ")";
    13     }
    14     if(k != pow(2,y)) {//当n不等于2的y次方时
    15         cout << "+";
    16         dfs(k - pow(2,y));
    17     }
    18 }
    19 int main()
    20 {
    21     cin >> n;
    22     dfs(n);
    23 
    24 return 0;
    25 }
    
    
    
    //NOIP 1998 T3



  • 相关阅读:
    协程初探
    属性传值
    分析代理模式
    上下文菜单与TrackPopupMenu
    走进小作坊(十六)----口碑营销
    线程池QueueUserWorkItem
    exosip
    Spark Core源代码分析: Spark任务运行模型
    微软2014校园招聘笔试试题
    怎样配置Tomcat环境变量
  • 原文地址:https://www.cnblogs.com/lipeiyi520/p/10355605.html
Copyright © 2011-2022 走看看