题目大意:
这道题就是把一个数变成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; }