用cpeditor严格一致过了,但全WA
查看原帖
用cpeditor严格一致过了,但全WA
1214833
Yuvxang楼主2024/9/7 09:13

求助大佬~~ 代码是凑出来的答案

#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <algorithm>
using namespace std;

int binary[1000];
int exp1[16];
int exp_2[16];
int exp_3[16];

void clean(int arr[]){
    for(int i = 0;i < 1000;i++){
        arr[i] = 0;
    }
}

int to_binary(int n, int arr[]){
    clean(arr);
    int cnt = 0;
    if(n == 0) arr[0] = 0;
    while(n != 0){
        arr[cnt++]= (n % 2);
        n /= 2;
    }
    return cnt;
}

string return_str(int n){
    if(n == 0)
        return "2(0)";
    else if(n == 1)
        return "2";
    else if(n == 2)
        return "2(2)";
    else if(n == 3)
        return "2(2+2(0))";
    else if(n == 4)
        return "2(2(2))";
}

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

int main(void){
    int n, len;
    cin >> n;
    len = to_binary(n, binary);
    
    int cnt = 0;
    for(int i = len - 1;i >= 0;i--){
        if(binary[i] == 1){
            exp1[cnt++] = i;
        }
    }

    for(int i = 0;i < cnt;i++){
        if(exp1[i] > 4)
            cout << "2" << '(';
        
        if(exp1[i] == 0 || exp1[i] == 1 || exp1[i] == 2 || exp1[i] == 3 || exp1[i] == 4){
            cout << return_str(exp1[i]);
        }
        else{ 
            int len2 = to_binary(exp1[i], exp_2);
            int cntexp = 0;
            for(int j = len2 - 1;j >= 0;j--){
                if(exp_2[j] == 1){
                    exp_3[cntexp++] = j;
                }
            }

            for(int j = 0; j < cntexp;j++){
                cout << return_str(exp_3[j]);
                if(j != cntexp - 1)
                    cout << '+';
            }
        }
        if(i != cnt - 1 && exp1[i] > 4){
            cout << ')' << '+';
        }
        else if(i != cnt - 1){
            cout << '+';
        }
    }

    return 0;
}
2024/9/7 09:13
加载中...