【题解】二的幂次方

题目描述

任何一个正整数都可以用2的幂次方表示。例如:137=27+23+2027+23+20,同时约定次方用括号来表示,即abab可表示为a(b)。

由此可知,137可表示为:2(7)+2(3)+2(0),进一步:7=22+2+2022+2+20(2121用2表示),3=2+202+20, 所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)。

又如:1315=210+28+25+2+1210+28+25+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表示。(在表示中不能有空格)

输入输出样例

输入样例一:

137

输出样例一:

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

输入样例二:

1315

输出样例二:

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
首先,如何把一个数转成二的幂次方表示形式呢?
先把这个数转成二进制,例如3可以转为11,按权值展开可得2+2(0),然后再用递归再把次方数转二进制,以此类推
具体程序如下:

#include<iostream>
#include<cstdio>
using namespace std;
void f(int num)
{
    int b[100000]={},c=0;
    bool check=false;
    if(num==0) {cout<<0; return;}
    if(num==1) {cout<<"2(0)"; return;}
    if(num==2) {cout<<"2"; return;}
    while(num!=0)
    {
        b[c]=num%2;
        num/=2;
        c++;
    }
    for(register int i=c-1;i>=0;--i)
    {
        if(b[i]==1)
        {
            if(!check)
            {
                if(i==1)
                {
                    cout<<"2";
                    check=true;
                    continue;
                }
                cout<<"2(";
                f(i);
                cout<<")";
                check=true;
            }
            else
            {
                if(i==1)
                {
                    cout<<"+2";
                    continue;
                }
                cout<<"+2(";
                f(i);
                cout<<")";
            }
        }
    }
}
int main()
{
    int x=0;
    cin>>x;
    f(x);
}

原文地址:https://www.cnblogs.com/2021-yanghaoran/p/10729020.html

时间: 2024-10-09 20:45:09

【题解】二的幂次方的相关文章

[Wikioi 2808][NOIP 1998普及组]二的幂次方---HBNU的童鞋过来看看

转载请说明出处:http://blog.csdn.net/cywosp/article/details/27095723 <黑天鹅--如何应对不可预知的未来> 作者:纳西姆?尼古拉斯?塔勒布 关于黑天鹅 在发现澳大利亚黑天鹅之前,所有欧洲人都确信天鹅全部都是白色的,人们在经过上百万次的确定性观察白天鹅之后得到了这一结论,而且一直延续了上千年,直到黑天鹅的出现,从而将这一结论完全打破.通过黑白天鹅的现象说明我们通过观察或经验获得的知识具有严重的局限性和脆弱性,仅仅一次的完全不同的发现就足以颠覆根

【日常学习】【搜索/递归】codevs2802 二的幂次方题解

转载请注明出处 [ametake版权全部]http://blog.csdn.net/ametake欢迎来看 题目描写叙述 Description 不论什么一个正整数都能够用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) 又如:1

leetcode326.三的幂(342.四的幂/231.二的幂)

1.题目 给定一个整数,写一个函数来判断它是否是 3 的幂次方. 2.解题思路 看见这题我的第一个思路就是利用if来给予条件从而判断是否是三的幂次方. bool isPowerOfThree(int n) { if(n<=0) return false; if(n==1) return true; 接着对于三的幂次方的理解要有个注重点,就是三的幂次方代表一个数的因数只有三和一而不是仅仅能搞除以三就可以了.而且要注意三的零次方等于一很容易遗漏这个条件,这个条件也起到了分隔作用所以也要注意.n/3就

递归--练习9--noi8758 2的幂次方表示

递归--练习9--noi8758 2的幂次方表示 一.心得 找准子问题就好 二.题目 8758:2的幂次方表示 总时间限制:  1000ms 内存限制:  65536kB 描述 任何一个正整数都可以用2的幂次方表示.例如: 137=27+23+20 同时约定方次用括号来表示,即ab可表示为a(b).由此可知,137可表示为: 2(7)+2(3)+2(0) 进一步:7=22+2+20(21用2表示) 3=2+20 所以最后137可表示为: 2(2(2)+2+2(0))+2(2+2(0))+2(0)

快速判断一个数是否是4的幂次方,若是,并判断出来是多少次方!

将4的幂次方写成2进制形式后,很容易发现有个特点,2进制中只有1个1(1在奇数位置),并且后面跟了偶数个0:因此问题可以转化为判断1后面是否跟了偶数个0就可以了. 4的整数次幂的二进制可以写为2^(2*n),即也可以写成2的幂次方,当然就满足2的幂次方的条件,即num&(num-1)==0. 思路:首先用条件num&(num-1)==0来判断是否为2的幂次方,若不满足,则不是.若满足,再用条件num&0x5555 5555 来判断,若为真,则这个整数是4 的幂次方.否则不是. #i

解题报告——2018级2016第二学期第四周作业 (2的幂次方)

解题报告——2018级2016第二学期第四周作业 题目: 描述 任何一个正整数都可以用2的幂次方表示.例如:137=27+23+20. 同时约定方次用括号来表示,即ab 可表示为a(b). 由此可知,137可表示为:2(7)+2(3)+2(0) 进一步:7= 22+2+20   (21用2表示) 3=2+20 所以最后137可表示为: 2(2(2)+2+2(0))+2(2+2(0))+2(0) 又如:1315=210 +28 +25 +2+1 所以1315最后可表示为: 2(2(2+2(0))+

递归好题,NOIP1998幂次方

先占坑提醒自己写这篇文章.回家再补,机房时间宝贵. 洛谷1010 幂次方 本题地址:http://www.luogu.org/problem/show?pid=1010 题目描述 任何一个正整数都可以用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+

hdu 5690 2016&quot;百度之星&quot; - 初赛(Astar Round2A) All X 快速二次幂 || 寻找周期

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5690 题意:m个数字全为x mod k ?= c;其中m <= 1010,0 < c,k <= 10,000; 法1:xxx = (10m-1)/9*x;但是n太大,需要同时mod.去除分母将式子变为:10m*x%(9k) - x%(9k) =? 9c ;其中 10m 快速二次幂即可: 时间复杂度为O(logn) 法2: 由于m个x数的产生对于mod具有可拆分性,所以直接求解周期即可: #i

2的幂次方(power)

2的幂次方(power) 题目描述 任何一个正整数都可以用2的幂次方表示.例如:137=27+23+20同时约定方次用括号来表示,即ab 可表示为a(b). 由此可知,137可表示为:2(7)+2(3)+2(0)进一步:7=22+2+20 (21用2表示)3=2+20所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)又如:1315=210 +28 +25 +2+1所以1315最后可表示为:2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0