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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实现链栈的各种基本运算的算法_LeetCode基础算法题第78篇:如何不用加减号实现两数的加法运算?...

發(fā)布時間:2023/12/4 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实现链栈的各种基本运算的算法_LeetCode基础算法题第78篇:如何不用加减号实现两数的加法运算?... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一直很糾結(jié)算法的文章應(yīng)該怎么寫。最后覺得還是從最簡單的level開始寫吧,一開始就弄些重量級的,什么人工智能,機(jī)器學(xué)習(xí)的算法,還要有大量的數(shù)學(xué)以及優(yōu)化的知識,小白們估計會很郁悶,當(dāng)然我也不一定能做出來對吧。

我計劃每題給出兩種語言的解決方案,一種靜態(tài)語言,一種動態(tài)語言。

我選擇C語言,Python和Java作為實(shí)現(xiàn)語言,由于篇幅有限,其他語言的實(shí)現(xiàn)有興趣的朋友請自己嘗試。

LeetCode 371. 兩整數(shù)之和(Sum of Two Integers)

問題描述:

不使用運(yùn)算符 + 和 - ???????,計算兩整數(shù) ???????a 、b ???????之和

示例:

C語言實(shí)現(xiàn):

既然不讓用+和-,那么只能用位運(yùn)算或者乘除和余來實(shí)現(xiàn)。

如果我們將兩個數(shù)轉(zhuǎn)換成二進(jìn)制,則有 0+0=0,0+1=1,1+1=10,我們忽略掉進(jìn)位的話就變成了0+0=0, 0+1=1, 1+1=0,這個時候我們完全可以把+替換成^。但是如何處理進(jìn)位呢?

我們會發(fā)現(xiàn)只有1+1時才發(fā)生進(jìn)位,即1&1才進(jìn)位,但是進(jìn)位是進(jìn)到前面一位的,所以我們要將進(jìn)位的1再左移一位。這個時候我們將上述得到的兩個新數(shù)再次執(zhí)行異或,如果沒有進(jìn)位的話,這將是最后我們要的結(jié)果,但是有可能還有進(jìn)位。若還有進(jìn)位的話,我們就要重復(fù)上面的步驟,一直到處理完所有的進(jìn)位。最后的結(jié)果將是異或不會再次遇到進(jìn)位問題,得到最終結(jié)果。

我們?nèi)绾闻袛喈惢虿粫龅竭M(jìn)位?根據(jù)兩個數(shù)&的結(jié)果,如果有進(jìn)位,&的結(jié)果一定不等于0,所以&的結(jié)果可以作為判斷計算是否結(jié)束的條件。

下圖演示了26+13=39的步驟:

具體代碼如下:

python語言的實(shí)現(xiàn):

python的實(shí)現(xiàn)和C語言的實(shí)現(xiàn)基本一致,但是注意python的整型長度是沒有限制的。我們需要限制在32位長度范圍內(nèi),所以我們要對位操作的結(jié)果再與0xffffffff來做限制。

此外最終的結(jié)果可能是大于32位最大正整數(shù)的(即0x7fffffff),而在python中大于這個數(shù)的值,仍然表示為正數(shù),而我們期望它應(yīng)該是一個負(fù)數(shù),所以當(dāng)最終的結(jié)果大于0x7fffffff的時候我們要對其取反,這樣既可得到相應(yīng)的負(fù)數(shù)。

代碼如下:

Java語言的實(shí)現(xiàn):

Java的實(shí)現(xiàn)和python語言的實(shí)現(xiàn)相同。

代碼如下:

總結(jié)

以上是生活随笔為你收集整理的实现链栈的各种基本运算的算法_LeetCode基础算法题第78篇:如何不用加减号实现两数的加法运算?...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。