每日一道編程題(185):數字的補數

2021-02-24 灰灰考研

每日編程中遇到任何疑問、意見、建議請公眾號留言或直接撩Q474356284(備註每日編程)

今日問題:

給定一個正整數,輸出它的補數。補數是對該數的二進位表示取反。

注意:

給定的整數保證在32位帶符號整數的範圍內。

你可以假定二進位數不包含前導零位。

示例 1:

輸入: 5

輸出: 2

解釋: 5的二進位表示為101(沒有前導零位),其補數為010。所以你需要輸出2。

示例 2:

輸入: 1

輸出: 0

解釋: 1的二進位表示為1(沒有前導零位),其補數為0。所以你需要輸出0。

解決方法:

首先說一下:

這裡的補數「不是「之前你學過的補碼哦。

雖然在計算機科學中補碼的概念是來源於數學中的補數的。

需要注意的一點是本題求正整數的原碼的時候需要忽略前導零位。

什麼意思呢?

舉個慄子:比如5,二進位是101,那麼它的補數就是010,十進位就是2.

但是!但是!但是!計算機不是這樣想的!

按照int來計算的話,int是多少位的?(下面這段話選看)

(在不同編譯器中,可能不一樣,比如在32位和64位編譯器下,int都是4個字節,也就是32位。(你也許又會問32位和64位為什麼都是4個字節,回答是:這是規定啊!需要說明一下的是指針類型存儲的是所指向變量的地址,所以32位機器只需要32bit,而64位機器需要64bit。)

那麼,int佔用4個字節,32位。

5的二進位就是1000,0000,0000,0000,0000,0000,0000,0101.

則它的反碼就是0111, 1111, 1111,1111, 1111, 1111, 1111,1010.

顯然,將其直接取反,再輸出為十進位就不符合題意了。

 

算法思想(一):

① 尋找一個掩碼(mask)

要找的這個掩碼的特徵應該是這個樣子的。5的二進位是101,只佔3個bit,那麼這個掩碼的最後3個bit要是0,其餘全部是1。如下所示:

5:0000 0101

掩碼:1111 1000

② 分別取反

~5 :1111 1010

~掩碼:0000 0111

③ 相與

~5 & ~掩碼 = 0000 0010

 

算法思想二:

return      pow(2,int(log2(num))+1) - 1 -num;

//圖片代碼中以注釋的方式寫出。

 

Java算法思想(三):

return      ~num & (Integer.highestOneBit(num) - 1);

以上各個符號的作用:

①Integer.highestOneBit(num):取num的二進位數最左邊的最高位,且高位後面全部補零,最後返回int型的結果。

②-1:因為經過上面的步驟,只有最高位為1其餘位都為0這樣再減一就會導致借位直到借到最高位,結果得到 最高位為0其餘位都為1相當於取反了

③&:對兩個二進位數進行按位與運算,例101& 010得000;

101&111得101。                                        

④~ :對一個數的二進位取反

C++代碼:

C代碼:

Java代碼:

明日題目預告:

唯一摩爾斯密碼詞

國際摩爾斯密碼定義一種標準編碼方式,將每個字母對應於一個由一系列點和短線組成的字符串, 比如: "a" 對應 ".-", "b" 對應 "-...", "c" 對應 "-.-.", 等等。

為了方便,所有26個英文字母對應摩爾斯密碼錶如下:

[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]

給定一個單詞列表,每個單詞可以寫成每個字母對應摩爾斯密碼的組合。例如,"cab" 可以寫成 "-.-.-....-",(即"-.-." + "-..." + ".-"字符串的結合)。我們將這樣一個連接過程稱作單詞翻譯。

返回我們可以獲得所有詞不同單詞翻譯的數量。

例如:

輸入: words =["gin", "zen", "gig", "msg"]

輸出: 2

解釋:

各單詞翻譯如下:

"gin"-> "--...-."

"zen"-> "--...-."

"gig"-> "--...--."

"msg"-> "--...--."

共有 2 種不同翻譯, "--...-." 和 "--...--.".

注意:





相關焦點

  • 每日一道編程題(128):最大數
    每日編程中遇到任何疑問、意見、建議請公眾號留言或直接撩Q474356284(備註每日編程)今日問題:給定一組非負整數,重新排列它們的順序使之組成一個最大的整數。解決方法:C++代碼:C代碼:Java代碼:明日題目預告:擺動序列I如果連續數字之間的差嚴格地在正數和負數之間交替,則數字序列稱為擺動序列。第一個差(如果存在的話)可能是正數或負數。少於兩個元素的序列也是擺動序列。
  • 高考再現編程題:學少兒編程究竟有什麼好處
    據了解,今年高考數學題,再次出現編程題!高考,已經開始考「編程」了!那麼今年都有哪些高考試卷出現了編程題?   今年高考的江蘇卷中也出現了編程題。   其實,編程題並不是第一次出現在高考試卷中了,近幾年中高考頻頻出現類似相關題目。
  • 考你一道題
    所以,但凡是繞點彎的題,我都很難做出來。第一道題:前兩天看到一道題,想半天沒想出來。心裡痒痒,上網搜了答案,還是沒想太明白。 後來聽說亞里斯多德也沒想清楚,我心裡又平衡了。題目如下:這個題的答案,知乎@馬同學有一篇文章講的非常好,可以搜來看看。
  • 2018年教師招聘考試每日一練185期(視頻版)
    (判斷題)【視頻解析】【每日一練】1.學生在閱讀學習過程中,當遇到困難或不熟悉的材料時,能放慢閱讀速度和重複閱讀,這主要屬於元認知策略中的( )。參考答案:2018年教師招聘考試每日一練185期答案(視頻版)>>>考試題庫:試題、每日一練
  • 每日一道中考壓軸題:電路的串、並聯,歐姆定律、電功率計算題
    在考試中,我們一般把最後的綜合題目稱為壓軸題。今天,我們來學習一道中考物理必考的電路的串、並聯、歐姆定律、電功率的壓軸題,有意思的是,這道題是雲南2019年最後三道壓軸題的排名倒數第二,更加顯得重要。分值9分。
  • 每日一題---課外探究電阻與溫度的關係
    (掃碼可下載)2020中考物理各地試題彙編每日一題---比熱容知識點初中物理知識點常用常量及換算冒氣的比不冒氣的食物一定溫度高嗎?每日一題---電路圖連接、互畫你能用物理知識解釋--人感冒為什麼會流鼻涕嗎?
  • 每日一題:A2B?
    連結:藏在一道題中的三個不等式(3):連結:每日一題:巴塞爾問題排序不等式舒爾不等式每日一題主要來自微信公眾號考研競賽數學,歷屆全國統一的研究生招生考試、各學校數學專業數學分析、高等代數等課程的招生考試、國內外全國或各高校、省、市或綜合性的競賽試題、相關參考書籍中的典型例題與練習題
  • 每天一道算法題(第三十二期)
    這周的題是隨機抽取,沒有特定的主題。算法題解沒有特定的思路,可能一人有一個思路,例如有的題既可以使用動規,又可以使用分治。殊途同歸,算法的目的就是提升效率。連續數列給定一個整數數組,找出總和最大的連續數列,並返回總和。
  • 每日一題411:特徵多項式
    【注】一道題的解題方法有很多,我們給出的可能不一定是最好的或者最簡單的,如果您有更好的解題方法明天我們將會為大家推送數學分析的習題更多歷史題目就在公眾號菜單「數·風採」下的「每日一題」中哦~       吉林大學數學學院官方微信平臺微信號
  • 初三物理電學每日1題:31單伏開關法測電阻經典例題
    圖片:黃山日出  拍攝:大胡老師文:大胡老師每日一題的目的
  • 每日一道 LeetCode (15):二進位求和
    ❞前文合集每日一道 LeetCode 前文合集代碼倉庫GitHub:https://github.com/meteor1993/LeetCodeGitee:https://gitee.com/inwsy/LeetCode
  • 實事求是的首要要求是什麼 支付寶螞蟻莊園小課堂12月1日每日一題...
    實事求是的首要要求是什麼 支付寶螞蟻莊園小課堂12月1日每日一題答案時間:2020-12-01 12:43   來源:今日頭條   責任編輯:毛青青 川北在線核心提示:原標題:實事求是的首要要求是什麼 支付寶螞蟻莊園小課堂12月1日每日一題答案 支付寶螞蟻莊園小課堂12月1日每日一題答案是什麼?
  • 【2017暑期版】每日一道中考題:閱讀理解D篇(含答案和解析)
    原標題:【2017暑期版】每日一道中考題:閱讀理解D篇(含答案和解析) Genius only means hard-working all one's life. 天才只意味著終身不懈的努力。
  • 物理一道題就是一類題,看我怎麼想
    衡中卷上一道選擇題,貌似簡單,實則…好了,以此題為例咱們仔細研讀一下上題。讀題第一步,就是篩選重要信息,那什麼是重要信息呢?說直白點,就是看數字,題目中數字基本都是條件,除了數字之外就要格外注意諸如恰好、剛好、緩慢、相對靜止、勻速、靜止、光滑、粗糙、瞬間、當……時等等,這些詞的出最重要的一個等量關係;第二步就是看題目最後的問題,這個直接關係到解題思路步驟。
  • 簡單又常見的算法題:漢諾塔
    )來源:山大王wld算法題儘量做到難易結合,在我們看一些難題的時候偶爾也可以看一些非常簡單又非常容易看懂的題,要不然算法題一直看不懂,容易打擊大家的興趣,今天來看一道非常簡單又非常常見的算法題,就是漢諾塔問題,這道題我想只要是學過編程的同學都應該知道的。
  • 「每日一題」勾股數
    解題思路:1、定義三個變量a,b,c,其中a,b作為直角邊,c作為斜邊;2、根據題中的信息,以及三角形的三邊關係判斷a,b的取值範圍;3、求出a^2+b^2的算術平方根的值,並判斷是否為整數;4、是整數就賦值給c,並比較三個數是否小於等於1000;---我是分割線----參考代碼:C語言
  • 第五人格每日一題鴕鳥驚嚇 第五人格每日一題答案
    導 讀 《第五人格》中每日一題是微信上的活動,這次的問題是鴕鳥驚嚇後的反應是什麼,這裡用了一直以來的誤區。不知道答案的小夥伴可以看看下面的答案哦。
  • 185手遊平臺手遊官網下載_185手遊平臺最新官網下載_18183手機遊戲...
    185手遊平臺官網下載是一款讓人越玩越上癮的遊戲。 185手遊平臺是由185手遊官網推出的遊戲盒子app,這款軟體主要是為用戶提供各種各樣的變態手遊,在這裡你能看到各種變態遊戲、破解遊戲,玩起來更加帶感哦,支持用戶充值返利,客服小姐姐為你答疑解惑,快來下載試試吧!
  • 號稱世界上最難的一道數獨題,你敢來挑戰嗎?據說答案只有一種
    瑛姑給黃蓉出了一道題,這道題對於瑛姑來說,是一道極難的題,她思考了許多年,也沒有找到答案。黃蓉聽後,答案脫口而出。題目要求是:將「1、2、3、4、5、6、7、8、9」這9個數字填到下面的九宮格中,要求每行、每列以及對角線上的數字的和都是15。可能大家覺得這是個老掉牙的題目了。