题目分析

求一个结果为 的表达式,需要使用 各一次,允许使用 运算符。

题解

本题只限制了“需要使用字符”,而没限制怎么使用,所以对于每个 Testcase,都可以有:

之后表达每个数字,由于存在 ,很容易就能想到二进制,我们把 按位取 的位置,设共有 ,位置分别是 (自左向右,),则:

二进制拆位后模拟一遍插上去几个2的幂次相加就完事了。

代码

void solve(){
    int x; cin >> x;
    int tmp = x, cnt = 0;
    string R = "";
    if(tmp & 1) R += "+1";
    tmp >>= 1;
    while(tmp){
        if(tmp & 1){
            R += "+2";
            for(int i = 0; i < cnt; ++i) R += "*2";
        }
        ++cnt, tmp >>= 1;
    }
    R += "+1-1+0+2-2+4-4";
    cout << R << endl;
    return;
}