今天是中秋假期的第二天,上午打了一上午的爐石,買了30元十包的新手包,毫不意外地啥也沒開出來......好了,言歸正傳。今天的習題是這樣的:給定兩個正整數(二進位制形式表示)a和b,問把a變為b需要改變多少位(bit)?也就是說,整數a和b的二進位制表示中有多少位是不同的?
解決這個問題的思路應該分兩步走:
(1)找到a和b中所有不同的位;
(2)將找到的不同的位進行計數。
第(1)步是非常好辦的,我們只需要將a和b進行「異或」操作,得到的結果中所有1代表的位就是a和b不同的位。第(2)步也是非常簡單,只要你看過程式設計之美的話,我們可以通過如下方法非常快速地找出乙個int型數中所有1的個數,**如下:
public static int numofoneinbits3(int origin)
return num;
}
這裡最難理解的可能就是origin &= (origin-1)這句話,這句話可以消除origin處於最低位的1。例如,origin=10,即二進位制形式為1010,那origin和origin-1進行「與」操作後,即1010&1001=1000,我們發現左側的1已經被消除了。繼續進行該程序,1000&0111=0000,右側的1也被消除了。此時,origin=0,退出迴圈,我們就得到了最終結果2,即10的二進位制形式中包涵兩個1。
我們利用這個方法就可以快速解決步驟(2),綜合步驟(1)步驟(2)我們就得到如下**:
public static int findmindifference(int a, int b)
return num;
}
程式設計之美上當然還介紹了其他一些求1個數的方法,這個大家就可以自己去看了,我貼的都是效率比較高的方法。最後,祝大家中秋節玩的開心! VGA線 1080P之傷 《中秋節篇》
哎,我也很鬱悶,查了相關的資料 電視機是最高支援1080p分辯率的,筆記本支援最高分辯率是2048 1536,那為什麼不行呢?我曾對顯示卡的ati驅動進行過設定自認為沒有問題的。這問題就一直留著了,幾個月之後.然後,我又把筆記本拿到一台液晶顯示器上進行測試,最終在這台液晶顯示器上實現了1080p的分...
《程式設計之美》背後的作者之美
中文站總編輯 霍泰穩收到 程式設計之美 這本書的時候,我是悲喜交集的。喜的是可以從中了解一下微軟是如何做面試的,和其他的軟體公司有什麼區別,這可能是我長期從事編輯的毛病,遇事總愛比較一番 悲的是我發現上面的絕大多數面試題目我都看不懂,更悲的是我還是乙個計算機科班出身的人,看來今後再也不能隨便給別人吹...
程式設計之美之烙餅問題
程式設計之美之一摞烙餅.cpp 定義控制台應用程式的入口點。不同的程式會得到不同的結果嗎?有個程式能得到不同的結果,但後來證明他的結果是錯的 該演算法有點在於在於找最少的交換次數,不是在於用最少的時間進行排序,此演算法的排序時間不是最少的。因為演算法的查詢時間太長了。include stdafx.h...