题解 | #2的幂次方#

2的幂次方

https://www.nowcoder.com/practice/7cf7b0706d7e4b439481f53e5fdac6e7

#include <string>
#include <iostream>

using namespace std;
string two(int n){
    string s;
    int m[20];
     if (n == 0){
         s = "0";
     }else if (n == 1){
         s = "2(0)";
     }else {
         int sum = 0,index = 0;
         while (n != 0){
             if (n % 2 == 1) {
                 m[sum++] = index;//这里注意,sum++是先赋值m[],再让sum++,对应下面sum要先减1再计算s
             }
                 n = n / 2;
                 index++;
             
         }

         if (m[sum - 1] != 1) {
             s = "2(" + two(m[sum - 1]) + ")";//通过two[m[sum - 1]]先找到最小问题的解
         } else {
             s = "2";
         }

         if (sum > 1) {//如果分解个数大于1,通过这个步骤,实现最小问题的合,再自底向上实现递归
             for (int i = sum - 2; i >= 0; i--) {
                 if (m[i] != 1) {s = s + "+" + "2(" + two(m[i]) + ")";}
                 else{s = s + "+" + "2";}
             }
         }
     }
    return s;
}
int main(){
   int n;
   while(scanf("%d",&n) != EOF){
       cout<<two(n)<<endl; 
   }
    return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-20 20:15
点赞 评论 收藏
分享
深夜书店vv:腾讯是这样的,去年很多走廊都加桌子当工区
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务