题目分析
求一个结果为 的表达式,需要使用
各一次,允许使用
运算符。
题解
本题只限制了“需要使用字符”,而没限制怎么使用,所以对于每个 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;
}

京公网安备 11010502036488号