004:2的幂次方表示

Posted MalcolmMeng

tags:

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

描述

任何一个正整数都可以用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))+2+2(0)

输入一个正整数n(n≤20000)。输出一行,符合约定的n的0,2表示(在表示中不能有空格)。样例输入

137

样例输出

2(2(2)+2+2(0))+2(2+2(0))+2(0)
我的代码 WA
#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<map>
#define DEBUG(x) cout << #x << " = " << x << endl
const int  MIN=0x80000000;
using namespace std;
int getBit(int n,int i)
{
    return (n>>i)&1;
}
void change(int n)
{
    if(n==0){
        printf("0");
        return;
    }
    int t=n;
    int cnt=0;
    for(int i=0;t;i++){
        int b=getBit(n,i);
        t=t<<1;
        if(b){
            if((31-i)==2){
                printf("2");
                return;
            }
            else {
            printf("2(");
            change(31-i);
            printf(")+");
            cnt++;
            }
        }
    }
    //DEBUG(cnt);
}
int main()
{
    freopen("in.txt","r",stdin);
    int n;
    cin>>n;
    change(n);
    return 0;
}

参考代码

#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<map>
#define DEBUG(x) cout << #x << " = " << x << endl
using namespace std;
int getBit(int n,int i) {
    return (n>>i)&1;
}
void change(int n) {
    bool first=true;
    for(int i=15; i>=0; i--) {
        if(getBit(n,i)) {
            if(!first){
                printf("+");
            }
            else first=false;
            if(i==0) {
                printf("2(0)");
            } else if(i==1) {
                printf("2");
            } else {
                printf("2(");
                change(i);
                printf(")");
            }
        }
    }
}
int main() {
//    freopen("in.txt","r",stdin);
    int n;
    cin>>n;
    change(n);
    return 0;
}

方向对了,但是怎么也得不到正确的代码,主要是编程思维不够成熟。从上面两份代码,就可以看出来。



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

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

c++2的幂次方

题解二的幂次方

2的幂次方

2的幂次方表示

2的幂次方表示