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;
    }

  • 相关阅读:
    cogs 2355. [HZOI 2015] 有标号的DAG计数 II
    洛谷 P4705 玩游戏
    LOJ #6436. 「PKUSC2018」神仙的游戏
    CF712D Memory and Scores
    CF 553E Kyoya and Train
    洛谷 P4841 城市规划
    [转载]Java集成PageOffice在线打开编辑word文件
    [转载]Java读取Excel中的单元格数据
    [转载]Java操作Excel文件的两种方案
    [转载]Java导出Excel
  • 原文地址:https://www.cnblogs.com/tcwbob/p/12890648.html
Copyright © 2011-2022 走看看