首页 > 试题广场 >

2的幂次方

[编程题]2的幂次方
  • 热度指数:7972 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
    Every positive number can be presented by the exponential form.For example, 137 = 2^7 + 2^3 + 2^0。     Let's present a^b by the form a(b).Then 137 is presented by 2(7)+2(3)+2(0). Since 7 = 2^2 + 2 + 2^0 and 3 = 2 + 2^0 , 137 is finally presented by 2(2(2)+2 +2(0))+2(2+2(0))+2(0).        Given a positive number n,your task is to present n with the exponential form which only contains the digits 0 and 2.

输入描述:
    For each case, the input file contains a positive integer n (n<=20000).


输出描述:
    For each case, you should output the exponential form of n an a single line.Note that,there should not be any additional white spaces in the line.
示例1

输入

1315

输出

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
#include <stdio.h>

void trans(int a){
    if(a==0){
        printf("2(0)");
        return;
    }
    if(a==1){
        printf("2");
        return;
    }
    int stack[15],top=-1,i=0;
    while(a!=0){
        stack[++top]=a%2;
        if(stack[top]!=0) i++;
        a=a/2;
    }
    while(top>-1){
        if(stack[top]!=0){
            i--;
           if(top==0) trans(0);
           else if(top==1) trans(1);
           else{
               printf("2(");
               trans(top);
               printf(")");
            }
            if(i>0) printf("+");
        }
        top--;
    }
}

int main(){
    int a;
    scanf("%d",&a);
    if(a==1) printf("2(0)");
    else if(a==0) printf(0);
    else trans(a);
}
发表于 2022-01-08 23:01:59 回复(0)