不使用乘法、除法和取模運算子來進行兩個整數的除法
在這個問題中,我們只需要將兩個整數相除,而不需要使用乘法、除法和取模運算子。儘管我們可以使用加法、乘法或位元操作。
問題陳述指出我們將得到兩個整數 x 和 y。在不使用乘法、除法或取模運算子的情況下,我們需要確定 x 除以 y 後的商數。
範例
輸入:x=15,y=5
輸出:3
輸入:x=10,y=4
輸出:2
輸入:x=-20,y=3
輸出:-6
#方法
方法1(使用簡單的數學)
在這個方法中,我們將使用一個簡單的數學演算法。以下是我們要遵循的步驟的逐步說明 -
我們將從被除數(即 x)中不斷減去數(即 y),直到 x 大於或等於 y。
當 y 大於 x 時,即除數大於被除數,被除數變成餘數,減法次數變成商數。
將減法執行的次數儲存在變數中並回傳它,這是我們想要的輸出。
範例
以下是上述演算法的 C 實作 &minnus;
#include <iostream> #include <bits/stdc++.h> using namespace std; long long division(long long a,long long b) // where a is dividend and b is divisor { long long sign=1; if((a<0) ^( b<0)) // - ^ - = +,+ ^ - = - , - ^ + = - , + ^ + = + { sign=-1; } long long m=abs(a); long long n=abs(b); long long count=0; // for storing the quotient while(m>=n){ m=m-n; count++; } if(sign==-1) // when sign is negative { count=-count; } return count; } int main(){ long long a=-21474; long long b=2; long long val=division(a,b); cout<<val<<endl; return 0; }
輸出
-10737
時間複雜度:O(a/b)
空間複雜度:O(1)
方法 2(使用位元操作)
由於任何數字都可以用 0 或 1 的形式表示,因此可以使用移位運算子以二進位形式表示商數。
使用 for 迴圈迭代除數從 31 到 1 的位元位置。
找出除數即 b<
驗證下一個位置時,將結果加到 temp 變數中,以確保 temp (b<
每次透過計算商來更新商數OR 1<
#更新對應符號後返回商數。
範例
下面是上述方法的 C 實作 -
#include <iostream> #include <bits/stdc++.h> using namespace std; long long division(long long a,long long b) // where a is dividend and b is divisor { long long sign=1; if((a<0) ^( b<0)) // - ^ - = +,+ ^ - = - , - ^ + = - , + ^ + = + { sign=-1; } long long m=abs(a); long long n=abs(b); long long count=0; // for storing the quotient long long temp=0; for (int j = 31; j >= 0; --j){ if (temp + (n << j) <= m){ temp += n << j; count |= 1L << j; } } if(sign==-1) // when sign is negative { count=-count; } return count; } int main(){ long long a=49; long long b=5; long long val=division(a,b); cout<<val<<endl; a=-18,b=5; cout<<division(a,b); return 0; }
輸出
9 -3
時間複雜度:O(log(a))
#空間複雜度:O(1),因為它不使用額外的空間。
方法 3(使用對數函數)
在這個方法中,我們將使用一個簡單的對數函數來計算商數。
眾所周知,
$$\mathrm{In(\frac{a}{b})\:=\:In(a)\:-\:In(b)}$$
可以進一步修改為
$$\mathrm{\frac{a}{b}\:=\:e^{(In(a)\:-\:In(b))}}$$
因此,這是使用這種有效方法解決給定問題的基本思想。
以下是我們將要遵循的方法的逐步說明 -
如果其中一個(即被除數或除數)為 0,我們將傳回 0。
現在,我們將使用異或函數 (XOR) 檢查符號,以將符號儲存在變數中。
如果除數為 1,則直接傳回被除數。
現在,宣告一個變數並使用 exp< 将等于 $\mathrm{e^{(In(a)\:-\:In(b))}}$ 的值存储在其中/b> 函數和 log 函數。
Log 和 exp 是 C 內建的函數。 Log 函數傳回輸入數字的自然對數值,exp 傳回等於 e 加上輸入值的值。
範例
下面是上述方法的 C 實作 -
#include <iostream> #include <bits/stdc++.h> using namespace std; long long int divide(long long int a,long long int b){ long long int sign=1; if(a==0||b==0) // when a is zero or b is zero { return 0; } if((a>0) ^ (b>0)) // - ^ - = +,+ ^ - = - , - ^ + = - , + ^ + = + { sign=-1; } if(b==1) // when b is 1 then it will return a example 51/1 = 51 { sign==-1?-a:a; return a; } long long int m=abs(a); long long int n=abs(b); //log function return the logarithmic value of the entered value with base e i.e. natural log of the entered value //exp function return the value equal to e^(entered value) long long int ans =exp(log(m) - log(n)) + 0.0000000001; // if it gives the value in decimal we will add from 0.0000000001 to account for accuracy errors if(sign==-1) // when sign is negative return the negative ans { return -ans; } return ans; } int main(){ long long int ans=divide(47,-9); cout<<ans<<endl; return 0; }
輸出
-5
時間複雜度:O(1),,因為執行該操作需要恆定的時間。
空間複雜度:O(1),因為它不使用額外的空間。
結論
在本文中,我們學習在不使用乘法、除法或取模運算子的情況下將兩個整數相除。我們學會了用不同的方法以不同的效率解決問題。他們使用簡單的數學、位元操作和對數函數。其中,使用對數函數是最有效的方法,因為它的時間複雜度為 O(1),是所有方法中最小的。
我希望這篇文章可以幫助您解決有關該主題的所有概念。
以上是不使用乘法、除法和取模運算子來進行兩個整數的除法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

在這個問題中,我們只需要將兩個整數相除,而不需要使用乘法、除法和取模運算子。儘管我們可以使用加法、乘法或位元操作。問題陳述指出我們將得到兩個整數x和y。在不使用乘法、除法或取模運算子的情況下,我們需要確定x除以y後的商數。範例輸入:x=15,y=5輸出:3輸入:x=10,y=4輸出:2輸入:x=-20,y=3輸出:-6方法方法1(使用簡單的數學)在這種方法中,我們將使用一個簡單的數學演算法。以下是我們要遵循的步驟的分步說明-我們將從被除數(即x)中不斷減去除數(即y),直到x大於或等於y。當y大於x時

Oracle資料庫作為一種強大的關聯式資料庫管理系統,提供了豐富的運算操作來滿足使用者的需求。在日常的資料庫操作中,減法操作是一個常見且重要的運算,它能夠幫助我們實現資料的減法運算,從而得到我們所需的結果。本文將詳細討論Oracle資料庫中減法操作的相關技巧,並給出具體的程式碼範例,幫助讀者更好地理解並運用這項功能。 1.減法操作的基本概念在Oracle數據

PHP中除法運算子(/)預設進行浮點除法,若需取商數的整數結果,可使用下列方法:floor()函數:向下捨去整數(例:floor(10.5)=10)ceil()函數:向上捨入整數(例:ceil(10.5)=11)截斷運算子(//):截斷為整數取模運算子(%):檢查餘數是否為0以判斷結果是否為整數

Excel是我們日常辦公中必不可少的一個辦公室軟體,那麼對於一些初次學習Excel的人來說總會遇到一些小問題,就比如Excel怎麼做減法這一問題,今天我就來跟小伙伴們分享這個操作步驟,具體的操作步驟就在下方,小夥伴們快來認真的看一看吧! 1.首先,打開Excel資料表,Excel想要做減法是透過公式來實現的,而公式一般都是由等號引導的,故在需要做減法的單元格中,先輸入=,(如下圖紅色圈出部分圖所示)。 2.然後,點選被減數所在的儲存格,就會自動在公式中補充上該儲存格的名字,(如下圖紅色圈出部分所示)。 3

深入理解Python運算子:加法、減法、乘法、除法及其意義,需要具體程式碼範例在Python程式語言中,運算子是進行各種數學運算的重要工具之一。其中,加法、減法、乘法和除法是最常見的運算符,本文將深入探討這些運算符的意義及其在Python中的使用方法。加法運算子(+)加法運算子用於將兩個數字相加,也可以用於連接兩個字串。 x=5y=3result

1.圖表的基本美化操作空間小,將幹擾的展示元素去掉。幹擾資料的元素有背景、網格線、圖例,可以刪除美化以及陰影進行柔化。 2.進入【PPT】,【開啟】圖表,點選【圖表】,選擇【+】,將其取消【勾選】,具體如圖示。 3.【右鍵】設定資料系列格式,點選【填滿】,勾選【無填滿】。點選【資料列】,點選【陰影】去除陰影,選擇【外框】,將【文字】顏色白色。 4.點選【刻度】,選擇【刻度線】,調整【主題類型】無,【顏色】白色,具體如圖示。 5.將需要刪除的地方刪除,使表格變得清爽,設計時不要一味的添加東西,適當的做

這裡我們將看到如何使用多執行緒環境執行矩陣加法和減法。 pthread用於在C或C++中同時執行多個執行緒。有兩個矩陣A和B。每個矩陣的階數為(mxn)。每個執行緒將獲取每一行,並執行加法或減法。因此,對於m行,有m個不同的執行緒。範例#include<iostream>#include<pthread.h>#include<cstdlib>#include<cstdint>#defineCORE3#defineMAX3usingnamespacestd;i

PHP8%-3為何會等於0?在PHP程式設計中,有時候我們會遇到一些奇怪又令人困惑的問題。一個特別有趣的問題就是,為什麼PHP的表達式8%-3會等於0?要回答這個問題,首先我們需要了解PHP中的模運算(取餘運算)。模運算是一種數學運算,用於計算一個數除以另一個數的餘數。在PHP中,用百分號(%)表示模運算。在數學中,當一個數除以另一個數的餘數為0時,我們說這
