目錄
範例
#方法
方法1(使用簡單的數學)
輸出
方法 2(使用位元操作)
方法 3(使用對數函數)
結論
首頁 後端開發 C++ 不使用乘法、除法和取模運算子來進行兩個整數的除法

不使用乘法、除法和取模運算子來進行兩個整數的除法

Sep 21, 2023 pm 12:41 PM
減法 整數除法 bitshift

不使用乘法、除法和取模運算子來進行兩個整數的除法

在這個問題中,我們只需要將兩個整數相除,而不需要使用乘法、除法和取模運算子。儘管我們可以使用加法、乘法或位元操作。

問題陳述指出我們將得到兩個整數 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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

不使用乘法、除法和取模運算子來進行兩個整數的除法 不使用乘法、除法和取模運算子來進行兩個整數的除法 Sep 21, 2023 pm 12:41 PM

在這個問題中,我們只需要將兩個整數相除,而不需要使用乘法、除法和取模運算子。儘管我們可以使用加法、乘法或位元操作。問題陳述指出我們將得到兩個整數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資料庫運算技巧:減法操作詳解 Mar 02, 2024 pm 06:15 PM

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

PHP 精準除法取整數結果 PHP 精準除法取整數結果 Apr 09, 2024 pm 01:09 PM

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

Excel怎麼做減法 Excel怎麼做減法 Mar 20, 2024 pm 02:46 PM

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

探究Python運算子的意義與應用:加、減、乘、除 探究Python運算子的意義與應用:加、減、乘、除 Jan 20, 2024 am 09:21 AM

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

PPT如何製作減法設計美化圖表 PPT如何製作減法設計美化圖表 Mar 20, 2024 pm 02:00 PM

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

使用pthread在C/C++中實現矩陣的加法和減法 使用pthread在C/C++中實現矩陣的加法和減法 Aug 28, 2023 am 09:05 AM

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

為什麼PHP中的8除以-3的結果為0? 為什麼PHP中的8除以-3的結果為0? Jan 26, 2024 am 10:36 AM

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

See all articles