c++2的幂次方

Posted lja001162

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++2的幂次方相关的知识,希望对你有一定的参考价值。

c++2的幂次方?

题目描述

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

同时约定用括号来表示方次,即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) 

2

的次幂降次排列。

输入

正整数n(n<=20000)

输出

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

样例输入

137

样例输出

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

代码解释

#include <bits/stdc++.h>
#include <stdio.h>
using namespace std;
int n;
int a[17];
void work(int x)

    if (x == 0)
    
        printf("0"); 
        return ;
    
    if (x == 2)
    
        printf("2");
        return ;
    
/*          x等于0或者2的时候就不可以拆分,直接返回原值       */ 
    while (1)
    
        int i;
        for (i=16;a[i]>x;i--);//重点    找出小于x的最大2次幂  
        if (a[i] != 2)
        
            printf("2(");
            work (i);//递归    继续拆分 
            printf(")");
        
        else
        
            printf("2"); 
        
        if (x - a[i]) printf("+"),x = x - a[i];//拆分完大的部分后仍有剩余,继续拆分小的部分 
        else return ;//拆分完就退出  
    

int main()

    a[0] = 1;
    for (int i = 1;i <= 16;i ++) a[i] = a[i - 1] * 2;
/*                  预处理出2的1-16次幂                                        */
    scanf("%d",&n);
    work (n);

以上是关于c++2的幂次方的主要内容,如果未能解决你的问题,请参考以下文章

判断整数是不是是2的幂次方

2的幂次方表示

[leetcode]231. 2的幂

题解二的幂次方

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

2的幂次方