null • 3年前
using namespace std;
//first n为操作数,r为递归深度,并记录当前的幂次方 //分解137为2(7)+2(3)+2(0)
void fun1(int n, int r) {
//递归结束出口
if(n == 1 )cout<<"2("<<r<<")";
else{
//继续分解,深度及幂次方加一。先分解再输出,且只有该位分解有余数才输出
fun1(n/2,r+1);
if(n%2 == 1)cout<<"+2("<<r<<")";
}
}
//second n为操作数,r为递归深度,并记录当前的幂次方 //进一步细化在分解137为2(7)+2(3)+2(0)的基础上进一步分解r
void fun2(int n, int r) {
//递归结束出口,需要继续分解2(7),也就是继续分解r
if(n == 1 ){
switch(r){
case 0:cout<<"2(0)";break;
case 1:cout<<"2";break;
case 2:cout<<"2(2)";break;
default:
cout<<"2(";
fun2(r,0);//注意括号输出。继续分解r即可
cout<<")";
}
}
else{
//继续分解,深度及幂次方加一。先分解再输出,且只有该位分解有余数才输出
fun2(n/2,r+1);
if(n%2 == 1){
switch(r){
case 0:cout<<"+2(0)";break;
case 1:cout<<"+2";break;
case 2:cout<<"+2(2)";break;
default:
cout<<"+2(";
fun2(r,0);//注意括号输出。继续分解r即可
cout<<")";
}
}
}
}
int main(void) {
cin >> n;
//fun1(n,0);
//cout<<endl;
fun2(n,0);
return 0;
}
评论:
请先登录,才能进行评论