P1010 幂次方

题目大意:

这道题就是把一个数变成2的幂次方来表示。

思路:

我们可以用递归的方式,把这个数拆开,在处理每个小问题。

代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int n;
void f(int n){
    int bs=0,mi=1;//bs表示当前运算的次数,mi表示当前的次方值 
    while(n!=0){ 
        mi=1;
        bs=0;//每次结束要更新 
        for(int j=0;j<20;j++){//寻找比N小的最大的次方值 
            mi*=2; 
            if(mi>n){//如果mi超过了n 
                bs=j;//求出运算的次数 
                break;//退出循环 
            }
        } 
        mi/=2;
        n-=mi;//n减去最大的次方值  
        if(bs==0)printf("2(0)");//如果N小于2
        if(bs==1)printf("2");//如果N小于4  
        if(bs>=2){//如果N大于等于4的话 
            printf("2(");
            f(bs);//继续调用递归函数,求出剩下的 
            printf(")");
        }
        if(n!=0){//如果N不为0,输出+号 
            printf("+");
        }
    }
}
int main(){
    scanf("%d",&n);//输入 
    f(n);//调用递归函数 
    return 0;
}
原文地址:https://www.cnblogs.com/shanxx/p/12894718.html