一、题目
https://www.luogu.org/problemnew/show/P1010
二、代码
#include<bits/stdc++.h>
using namespace std;
// 根据2的几次幂进行分解
string decompose(int num)
{
if(num==0)
{
return "0";
}
string s = "";
int exp = 0; // 指数,比如2=2^1,则指数为1
do
{
if(num & 1) // 判断奇数
{
// num=2时,exp==1才为真
string tmp1 = exp==1 ? "2" : "2("+decompose(exp)+")";
string tmp2 = s=="" ? "" : "+";
// 拼接字符串,依题意,要把低次方接在后面
s = tmp1 + tmp2 + s;
}
exp++;
} while(num >>= 1);//每次向右移一位,即除以2
return s;
}
int main()
{
int x;
cin>>x;
cout<<decompose(x)<<endl;
return 0;
}
少儿编程、信息学竞赛咨询请加微信307591841或QQ群581357582
信息学竞赛公众号.jpg
网友评论