zoukankan      html  css  js  c++  java
  • 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\%100% 的数据,1le nle 2 imes 10^41n2×104。

    此题的主要思路在于转二进制和递归,主要注意拼凑字符串时注意高次方在前,低次方在后。递归不要忘了向右移位。

    #include<iostream>
    using namespace std;
    string h(int x,int i=0,string s=string(""))
    {
    if(x==0)
    {
    return string("0");
    }
    do
    {
    if(x&1)
    {
    s=(i==1?"2":"2("+h(i)+")")+(s==""?"":"+")+s;
    }
    }
    while(++i,x>>=1);
    return s;
    }
    int main()
    {
    int x;
    cin>>x;
    cout<<h(x)<<endl;
    }

  • 相关阅读:
    HDU_2203_KMP入门
    HDU_1711_初识KMP算法
    过滤器基础
    HDU_1907_基础博弈nim游戏
    nim游戏解法(转)
    HDU_1517_博弈(巧妙规律)
    HDU_1850_nim游戏
    HDU_1847_基础博弈sg函数
    < 转>Java 反射机制浅析
    <转>单机版搭建Hadoop环境
  • 原文地址:https://www.cnblogs.com/tcwbob/p/12890648.html
Copyright © 2011-2022 走看看