2 条题解

  • 2
    @ 2023-11-12 18:06:07

    不想思考,直接打表:

    #include<iostream>
    #include<vector>
    typedef long long LL;
    #define _P(A) A=-~A
    #define fione(i,a,b) for(int i=a;i<=b;_P(i))
    #define Fione(i,a,b) for(int i=a;i<b;_P(i))
    int n;
    std::vector<int>a;
    inline void work(int id){
    	switch(id){
    		case 0:std::cout<<"2(0)";break;
    		case 1:std::cout<<"2";break;
    		case 2:std::cout<<"2(2)";break;
    		case 3:std::cout<<"2(2+2(0))";break;
    		case 4:std::cout<<"2(2(2))";break;
    		case 5:std::cout<<"2(2(2)+2(0))";break;
    		case 6:std::cout<<"2(2(2)+2)";break;
    		case 7:std::cout<<"2(2(2)+2+2(0))";break;
    		case 8:std::cout<<"2(2(2+2(0)))";break;
    		case 9:std::cout<<"2(2(2+2(0))+2(0))";break;
    		case 10:std::cout<<"2(2(2+2(0))+2)";break;
    		case 11:std::cout<<"2(2(2+2(0))+2+2(0))";break;
    		case 12:std::cout<<"2(2(2+2(0))+2(2))";break;
    		case 13:std::cout<<"2(2(2+2(0))+2(2)+2(0))";break;
    		case 14:std::cout<<"2(2(2+2(0))+2(2)+2)";break;
    	}
    }
    inline void solve(){
    	bool pd(false);
    	for(int i=a.size()-1;i>=0;--i){
    		if(a[i]){
    			if(pd)std::cout<<'+';
    			pd=true;			
    			work(i);
    		}
    	}
    }
    signed main(){
    	std::cin.tie(nullptr)->std::ios::sync_with_stdio(false);
    	std::cin>>n;
    	for(;n;n>>=1)a.push_back(n&1);
    	solve();
    	return 0;
    }
    
    • 2
      @ 2022-7-12 23:05:57
      #include<bits/stdc++.h>
      using namespace std;
      string run(int x,int i=0,string s=string("")){
      	if(x==0)return string("0");
      	do if(x&1)s=(i==1?"2":"2("+run(i)+")")+(s==""?"":"+")+s;//拼接字符串,应题意,要把低次方接在后面
      	while(++i,x>>=1);//每次向右移位
      	return s;
      }
      int main(){
      	int x;cin>>x;
      	cout<<run(x)<<endl;
      }
      
      • 1

      信息

      ID
      11
      时间
      1000ms
      内存
      125MiB
      难度
      2
      标签
      递交数
      36
      已通过
      33
      上传者