P1010 幂次方

· · 个人记录

本萌新来写题解辣! 此处@某某学姐

----------------------------------巨丑的分割线------------------------------------ 听了学姐的建议来写题解会有用的QWQ

这里膜malao orzorzorzorzorzorz

----------------------------------巨丑的分割线------------------------------------ 啊现在开始写题解oWo

先审题。。。。。可以用递归别的不会QWQ

一步步来

137=2^7+2^3+2^0

那么可以得到这个

    int i=-1,y;
    int m;
    do
    {
        i++;
        m=pow(2,i); 
    }
    while(m<=n);

这个就是用来得出指数i的

又看到7=2^2+2+2^0

就可以来这一步ovo

    y=i-1;   //把i的值给y省的弄错
    if(y==0)cout<<"2(0)"; //分别讨论
    if(y==1)cout<<2;
    if(y>1)        //若还能分就把它带回到这个递归里来
    {
        cout<<"2(";
        mi(y);        
        cout<<")";
    }

那么第一个数解出来了 下一步是解决+多少 很简单,再把这个剩下的再带回去算一遍就行owo

    n-=pow(2,y);
    cout<<"+";
    mi(n);

然后就是主程序了

int main(){
    int n;   //简短  讲究
    cin>>n;
    mi(n);
    return 0;
}

然后最后把全部弄出来

#include<iostream>
#include<cmath>
using namespace std;
void mi(int n){
    int i=-1,y;
    int m;
    do
    {
        i++;
        m=pow(2,i); 
    }
    while(m<=n);
    y=i-1;
    if(y==0)cout<<"2(0)";
    if(y==1)cout<<2;
    if(y>1)
    {
        cout<<"2(";
        mi(y);
        cout<<")";
    }
    if(n!=pow(2,y))
    {
    n-=pow(2,y);
    cout<<"+";
    mi(n);
    }
}
int main(){
    int n;
    cin>>n;
    mi(n);
    return 0;
}