2的幂次方
每个正数都可以用指数形式表示。
例如,137=27+23+20。
让我们用 a(b) 来表示 ab。
那么 137 可以表示为 2(7)+2(3)+2(0)。
因为 7=22+2+20,3=2+20,所以 137 最终可以表示为 2(2(2)+2+2(0))+2(2+2(0))+2(0)。
给定一个正数 n,请你将 n 表示为只包含 0 和 2 的指数形式。
数据范围
1≤n≤20000,
每个输入最多包含 100 组数据。
输入格式
输入包含多组数据。
每组数据占一行,一个正数 n。
输出格式
每组数据输出一行,一个指数形式表示。
输入样例:
1315
输出样例:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
1998年NOIP普及组题目,一个比较简单的递归,特判输入为1的情况即可
AC代码:
//手机双击代码可以全屏看代码哦
#include<bits/stdc++.h>
using namespace std;
void f(int x){
if(x==2){//如果x为2,无法继续细分,输出2后return
printf("2");
return ;
}
if(x==1){//x为1的情况对应前面2^1,所以输出2
printf("2");
return ;
}
if(x==0){
printf("0");
return ;
}
bool flag=0;
for(int i=14;i>=0;--i){
if((1<<i)&x){
if(flag)printf("+");//如果不是第一个输出则输出加号
flag=1;
if(i!=1)printf("2(");//特判i是否等于1,如果等于1即2的1次方
f(i);//递归 //不需要输出2(1),输出2即可
if(i!=1)printf(")");
}
}
}
int main(){
int n;
while(cin>>n){
if(n!=1)f(n);
else printf("2(0)");
printf("\n");
}
return 0;//保持好习惯,和点赞一样
}