P1010 [NOIP 1998 普及组] 幂次方
时间限制: 1.00s 内存限制: 125.00MB
题目描述
任何一个正整数都可以用 2 的幂次方表示。例如 137=27+23+20。
同时约定次方用括号来表示,即 ab 可表示为 a(b)。
由此可知,137 可表示为 2(7)+2(3)+2(0)。
进一步:
7=22+2+20 ( 21 用 2 表示),并且 3=2+20。
所以最后 137 可表示为 2(2(2)+2+2(0))+2(2+2(0))+2(0)。
又如 1315=210+28+25+2+1。
所以 1315 最后可表示为 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)。
输入格式
一行一个正整数 n。
输出格式
符合约定的 n 的 0,2 表示(在表示中不能有空格)。
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
string break_to_binary(int n){
if(n==1){
return "2(0)";
}
else if(n==2){
return "2";
}
else if(n==3){
return "2+2(0)";
}
int result = n;
int power = 0;
while(n>1){
n/=2;
power++;
}
int remain = result-pow(2,power);
if(remain == 0){
return "2("+break_to_binary(power)+")";
}
else{
return "2("+break_to_binary(power)+")"+"+"+break_to_binary(result-pow(2,power));
}
}
int main(){
int n;
cin>>n;
cout<<break_to_binary(n);
return 0;
}