日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

蓝桥杯-算法训练 2的次幂表示

發布時間:2025/3/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝桥杯-算法训练 2的次幂表示 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:http://lx.lanqiao.cn/problem.page?gpid=T235

問題描述 任何一個正整數都可以用2進制表示,例如:137的2進制表示為10001001。
  將這種2進制表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表達式:137=2^7+2^3+2^0
  現在約定冪次用括號來表示,即a^b表示為a(b)
  此時,137可表示為:2(7)+2(3)+2(0)
  進一步:7=2^2+2+2^0 (2^1用2表示)
  3=2+2^0?
  所以最后137可表示為:2(2(2)+2+2(0))+2(2+2(0))+2(0)
  又如:1315=2^10+2^8+2^5+2+1
  所以1315最后可表示為:
  2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0) 輸入格式 正整數(1<=n<=20000) 輸出格式 符合約定的n的0,2表示(在表示中不能有空格) 樣例輸入 137 樣例輸出 2(2(2)+2+2(0))+2(2+2(0))+2(0) 樣例輸入 1315 樣例輸出 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0) 提示 用遞歸實現會比較簡單,可以一邊遞歸一邊輸出
思路:記錄二進制表示中是1的權值,然后按權值記錄編號,進行遞歸輸出。

#include<iostream> #include<cstdio> #include<ctype.h>using namespace std;void mi(int n){int ans=0;int x;int a[32];//存儲32位整數 int i=0;while(n){x=n%2;if(x==1){a[ans++]=i;}++i;n/=2;}for(i=ans-1; i>=0; --i){if(a[i]==0){printf("2(0)");}else if(a[i]==1){printf("2");}else if(a[i]==2){printf("2(2)");}else if(a[i]>=3){printf("2(");mi(a[i]);printf(")");}if(i!=0) printf("+");} }int main(){int n;while(scanf("%d",&n)!=EOF){mi(n);printf("\n");}return 0; }


總結

以上是生活随笔為你收集整理的蓝桥杯-算法训练 2的次幂表示的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。