最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言 解決不用+、-、×、÷數(shù)字運(yùn)算符做加法的實(shí)現(xiàn)方法

 更新時(shí)間:2013年05月24日 09:09:23   作者:  
本篇文章是對(duì)在C語(yǔ)言中解決不用+、-、×、÷數(shù)字運(yùn)算符做加法的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
題目:寫(xiě)一個(gè)函數(shù),求兩個(gè)整數(shù)的之和,要求在函數(shù)體內(nèi)不得使用+、-、×、÷。
分析:
這又是一道考察發(fā)散思維的很有意思的題目。當(dāng)我們習(xí)以為常的東西被限制使用的時(shí)候,如何突破常規(guī)去思考,就是解決這個(gè)問(wèn)題的關(guān)鍵所在。

看到的這個(gè)題目,我的第一反應(yīng)是傻眼了,四則運(yùn)算都不能用,那還能用什么啊?可是問(wèn)題總是要解決的,只能打開(kāi)思路去思考各種可能性。首先我們可以分析人們是如何做十進(jìn)制的加法的,比如是如何得出5+17=22這個(gè)結(jié)果的。實(shí)際上,我們可以分成三步的:第一步只做各位相加不進(jìn)位,此時(shí)相加的結(jié)果是12(個(gè)位數(shù)5和7相加不要進(jìn)位是2,十位數(shù)0和1相加結(jié)果是1);第二步做進(jìn)位,5+7中有進(jìn)位,進(jìn)位的值是10;第三步把前面兩個(gè)結(jié)果加起來(lái),12+10的結(jié)果是22,剛好5+17=22。

前面我們就在想,求兩數(shù)之和四則運(yùn)算都不能用,那還能用什么???對(duì)呀,還能用什么呢?對(duì)數(shù)字做運(yùn)算,除了四則運(yùn)算之外,也就只剩下位運(yùn)算了。位運(yùn)算是針對(duì)二進(jìn)制的,我們也就以二進(jìn)制再來(lái)分析一下前面的三步走策略對(duì)二進(jìn)制是不是也管用。

5的二進(jìn)制是101,17的二進(jìn)制10001。還是試著把計(jì)算分成三步:第一步各位相加但不計(jì)進(jìn)位,得到的結(jié)果是10100(最后一位兩個(gè)數(shù)都是1,相加的結(jié)果是二進(jìn)制的10。這一步不計(jì)進(jìn)位,因此結(jié)果仍然是0);第二步記下進(jìn)位。在這個(gè)例子中只在最后一位相加時(shí)產(chǎn)生一個(gè)進(jìn)位,結(jié)果是二進(jìn)制的10;第三步把前兩步的結(jié)果相加,得到的結(jié)果是10110,正好是22。由此可見(jiàn)三步走的策略對(duì)二進(jìn)制也是管用的。

接下來(lái)我們?cè)囍讯M(jìn)制上的加法用位運(yùn)算來(lái)替代。第一步不考慮進(jìn)位,對(duì)每一位相加。0加0與 1加1的結(jié)果都0,0加1與1加0的結(jié)果都是1。我們可以注意到,這和異或的結(jié)果是一樣的。對(duì)異或而言,0和0、1和1異或的結(jié)果是0,而0和1、1和0的異或結(jié)果是1。接著考慮第二步進(jìn)位,對(duì)0加0、0加1、1加0而言,都不會(huì)產(chǎn)生進(jìn)位,只有1加1時(shí),會(huì)向前產(chǎn)生一個(gè)進(jìn)位。此時(shí)我們可以想象成是兩個(gè)數(shù)先做位與運(yùn)算,然后再向左移動(dòng)一位。只有兩個(gè)數(shù)都是1的時(shí)候,位與得到的結(jié)果是1,其余都是0。第三步把前兩個(gè)步驟的結(jié)果相加。如果我們定義一個(gè)函數(shù)AddWithoutArithmetic,第三步就相當(dāng)于輸入前兩步驟的結(jié)果來(lái)遞歸調(diào)用自己。
有了這些分析之后,就不難寫(xiě)出如下的代碼了:
復(fù)制代碼 代碼如下:

int AddWithoutArithmetic(int num1, int num2)
{
 if(num2 == 0)
  return num1;
 int sum = num1 ^ num2;   //異或運(yùn)算
 int carry = (num1 & num2) << 1;     //對(duì)0加0、0加1、1加0而言,都不會(huì)產(chǎn)生進(jìn)位,只有1加1時(shí),會(huì)向前產(chǎn)生一個(gè)進(jìn)位。因此兩個(gè)數(shù)先做位與運(yùn)算,然后再向左移動(dòng)一位。
 return AddWithoutArithmetic(sum, carry);
}

相關(guān)文章

  • C++面試基礎(chǔ)之static關(guān)鍵字詳解

    C++面試基礎(chǔ)之static關(guān)鍵字詳解

    這篇文章主要給大家介紹了關(guān)于C++面試基礎(chǔ)之static關(guān)鍵字的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • c語(yǔ)言在控制臺(tái)判定鼠標(biāo)左鍵的小例子

    c語(yǔ)言在控制臺(tái)判定鼠標(biāo)左鍵的小例子

    c語(yǔ)言在控制臺(tái)判定鼠標(biāo)左鍵的小例子,需要的朋友可以參考一下
    2013-06-06
  • C++中HTTP?代理服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)詳解

    C++中HTTP?代理服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)詳解

    代理服務(wù)器,即允許一個(gè)網(wǎng)絡(luò)終端(一般為客戶端)通過(guò)這個(gè)服務(wù)與另一?個(gè)網(wǎng)絡(luò)終端(一般為服務(wù)器)進(jìn)行非直接的連接,下面我們就來(lái)看看如何使用C++設(shè)計(jì)與實(shí)現(xiàn)一個(gè)HTTP?代理服務(wù)器吧
    2024-01-01
  • QT6中QTextcodec頭文件找不到的解決方法

    QT6中QTextcodec頭文件找不到的解決方法

    本文主要介紹了QT6中QTextcodec頭文件找不到的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 詳解C語(yǔ)言結(jié)構(gòu)體中的char數(shù)組如何賦值

    詳解C語(yǔ)言結(jié)構(gòu)體中的char數(shù)組如何賦值

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言結(jié)構(gòu)體中的char數(shù)組如何賦值的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03
  • C語(yǔ)言?const修飾普通變量和指針的操作代碼

    C語(yǔ)言?const修飾普通變量和指針的操作代碼

    這篇文章主要介紹了C語(yǔ)言const修飾普通變量和指針,用const修飾普通變量時(shí),是在語(yǔ)法層面限制了變量的修改,但是本質(zhì)上,變量還是變量,是一種不能被修改的變量,本文通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • C語(yǔ)言動(dòng)態(tài)內(nèi)存管理介紹

    C語(yǔ)言動(dòng)態(tài)內(nèi)存管理介紹

    大家好,本篇文章主要講的是C語(yǔ)言動(dòng)態(tài)內(nèi)存管理介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 函數(shù)指針的強(qiáng)制類(lèi)型轉(zhuǎn)換實(shí)現(xiàn)代碼

    函數(shù)指針的強(qiáng)制類(lèi)型轉(zhuǎn)換實(shí)現(xiàn)代碼

    函數(shù)指針的強(qiáng)制類(lèi)型轉(zhuǎn)換實(shí)現(xiàn)代碼。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-10-10
  • C/C++中智能指針的用法詳解

    C/C++中智能指針的用法詳解

    C/C++中,指針是一個(gè)非常重要的概念,其強(qiáng)大但也麻煩,麻煩之處就在于一旦你申請(qǐng)了內(nèi)存,那就必須要手動(dòng)去釋放內(nèi)容,否則就會(huì)造成內(nèi)存泄漏。所以智能指針的作用就是防止我們麻痹大意忘記釋放內(nèi)存,幫助我們管理內(nèi)存的,本文就來(lái)聊聊智能指針的用法
    2023-01-01
  • C++ STL中一些常用算法總結(jié)

    C++ STL中一些常用算法總結(jié)

    都說(shuō)STL是數(shù)據(jù)容器與算法的高度組合,在前面的文章中我們介紹了常見(jiàn)的幾種容器,vector、list、map、deque等,今天我們?cè)賮?lái)介紹下STL中常用的一些算法,需要的朋友可以參考下
    2024-02-02

最新評(píng)論

通渭县| 隆化县| 长治县| 手机| 栾川县| 天水市| 同仁县| 洛浦县| 深水埗区| 兰州市| 大方县| 绥中县| 昌江| 蒙阴县| 佛教| 樟树市| 南开区| 望城县| 青铜峡市| 利川市| 黔东| 大丰市| 昭觉县| 鄂伦春自治旗| 运城市| 武平县| 安仁县| 新和县| 清原| 阿荣旗| 呼伦贝尔市| 孟州市| 金门县| 兴宁市| 漳浦县| 南宁市| 沁阳市| 瑞安市| 洞头县| 武威市| 开封县|