题解 | #2的幂次方#

2的幂次方

https://www.nowcoder.com/practice/7cf7b0706d7e4b439481f53e5fdac6e7

/*#include<stdio.h>
int swap(int *a,int *b)
{
    int temp=*a;
    *a=*b;
    *b=temp;
    return 0;
}
int B2D(int n,int *A)
{
    int i=0,j;
    while(n!=0)
    {
        A[i++]=n%2;
        n/=2;
    }
    n=i;
    for(i=0,j=n-1;i!=j;i++,j--)swap(&A[i],&A[j]);
    return n;
}
int main()
{
    int A[20];
    int i,n=B2D(127,A);
    for(i=0;i<n;i++)printf("%d",A[i]);
}*/
#include<stdio.h>
#include<string.h>
/*static int tag=0;
int B2D(int n,int *A)
{
    int i=0,j;
    while(n!=0)
    {
        A[i++]=n%2;
        n/=2;
    }
    n=i;
    return n;
}
int f(int* A,int pos,int n)
{if(pos>=n)return 0;
if(tag++>0)printf("+");
    if(pos==0){printf("0");return 0;}
    if(pos==1){printf("2");return 0;}
    else printf("2(");
    int B[20],m=B2D(pos,B);
    f(B,0,m);
    f(A,pos+1,n);
    printf(")");
    //for(i=0,j=n-1;i!=j;i++,j--)swap(&A[i],&A[j]);
    return n;
}*/
static int tag = 0;
static char str[500];
void f(int n) {
    if (n == 0) {
        strcat(str, "2(0)");
        return;
    }
    if (n == 1) {
        strcat(str, "2");
        return;
    }
    int i = 0, j, A[20];
    while (n != 0) {
        A[i++] = n % 2;
        n /= 2;
    }
    if (i == 0)return;
    for (j = i - 1; j >= 0; j--) {
        if (A[j] == 1 && j >= 2)strcat(str, "2(");
        if (A[j] == 1)f(j);
        if (A[j] == 1 && j >= 2)strcat(str, ")");
    }
}
int main() {
    int num;
    scanf("%d",&num);
    f(num);
    int i, n = strlen(str);
    for (i = 0; i < n - 1; i++) {
        printf("%c", str[i]);
        if (str[i] == '2' && str[i + 1] == '2')printf("+");
        if (str[i] == ')' && str[i + 1] == '2')printf("+");

    }
    printf("%c", str[i]);

}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务