Inhaltsverzeichnis
Beispiel
Methode
Methode 1 (einfache Mathematik verwenden)
Heim Backend-Entwicklung C++ Dividieren Sie zwei ganze Zahlen, ohne die Multiplikations-, Divisions- und Modulo-Operatoren zu verwenden

Dividieren Sie zwei ganze Zahlen, ohne die Multiplikations-, Divisions- und Modulo-Operatoren zu verwenden

Sep 21, 2023 pm 12:41 PM
减法 Ganzzahlige Division bitshift

Dividieren Sie zwei ganze Zahlen, ohne die Multiplikations-, Divisions- und Modulo-Operatoren zu verwenden

Bei diesem Problem müssen wir nur zwei ganze Zahlen dividieren, ohne Multiplikations-, Divisions- und Modulo-Operatoren zu verwenden. Obwohl wir Additions-, Multiplikations- oder Bitoperationen verwenden können.

Die Problemstellung besagt, dass wir zwei ganze Zahlen x und y erhalten. Ohne Multiplikation, Division oder den Modulo-Operator müssen wir den Quotienten von x dividiert durch y bestimmen.

Beispiel

Eingabe: x=15, y=5

Ausgabe: 3

Eingabe: x=10, y=4

Ausgabe: 2

Eingabe: x=-20, y=3

Ausgabe: -6

Methode

Methode 1 (einfache Mathematik verwenden)

Bei dieser Methode verwenden wir einen einfachen mathematischen Algorithmus. Nachfolgend finden Sie eine Schritt-für-Schritt-Anleitung, was wir befolgen werden –

  • Wir subtrahieren so lange den Divisor (d. h. y) vom Dividenden (d. h. x), bis x größer oder gleich y ist.

  • Wenn y größer als x ist, das heißt, der Divisor größer als der Dividend ist, wird der Dividend zum Rest und die Anzahl der Subtraktionen wird zum Quotienten.

  • Speichern Sie die Häufigkeit, mit der die Subtraktion durchgeführt wird, in einer Variablen und geben Sie sie zurück. Dies ist unsere gewünschte Ausgabe.

Beispiel

Das Folgende ist die C++-Implementierung des obigen Algorithmus −

#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;
}
Nach dem Login kopieren

Ausgabe

-10737
Nach dem Login kopieren

Zeitliche Komplexität: O(a/b)

Raumkomplexität: O(1)

Methode 2 (mit Bitoperationen)

  • Da jede Zahl als 0 oder 1 dargestellt werden kann, kann der Quotient mithilfe des Schiebeoperators in binärer Form dargestellt werden.

  • Verwenden Sie eine for-Schleife, um die Bitpositionen des Divisors von 31 bis 1 zu iterieren.

  • Suchen Sie das erste Bit, bei dem der Divisor, also b<<
  • Wenn Sie die nächste Position überprüfen, fügen Sie das Ergebnis zur temporären Variablen hinzu, um sicherzustellen, dass temp+(b<<
  • Aktualisieren Sie den Quotienten jedes Mal, indem Sie den Quotienten

    OR 1<< berechnen

  • Kehren Sie zum Quotienten zurück, nachdem Sie das entsprechende Symbol aktualisiert haben.

Beispiel

Das Folgende ist die C++-Implementierung der oben genannten Methode -

#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;
}
Nach dem Login kopieren

Ausgabe

9
-3
Nach dem Login kopieren

Zeitliche Komplexität: O(log(a))

Raumkomplexität: O(1), weil es keinen zusätzlichen Platz beansprucht.

Methode 3 (mit logarithmischer Funktion)

Bei dieser Methode verwenden wir eine einfache logarithmische Funktion, um den Quotienten zu berechnen.

Wie wir alle wissen,

$$mathrm{In(frac{a}{b}):=:In(a):-:In(b)}$$

kann weiter geändert werden zu

$$mathrm{frac{a}{b}:=:e^{(In(a):-:In(b))}}$$

Das ist also die Grundidee, das gegebene Problem mit dieser effizienten Methode zu lösen.

Hier finden Sie die Schritt-für-Schritt-Anleitung für die Methode, der wir folgen werden –

  • Wenn einer davon (d. h. Dividende oder Divisor) 0 ist, geben wir 0 zurück.

  • Jetzt prüfen wir das Symbol mit der Exklusiv-ODER-Funktion (XOR), um das Symbol in einer Variablen zu speichern.

  • Wenn der Divisor 1 ist, wird die Dividende direkt zurückgegeben.

  • Deklarieren Sie nun eine Variable und verwenden Sie die Funktion

    exp und die Funktion < 将等于 $mathrm{e^{(In(a):-:In(b))}}$ 的值存储在其中/b>log.

  • Log und exp sind integrierte Funktionen in C++. Die Log-Funktion gibt den natürlichen Logarithmus der Eingabezahl zurück und exp gibt einen Wert zurück, der e plus dem Eingabewert entspricht.

Beispiel

Das Folgende ist die C++-Implementierung der oben genannten Methode -

#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;
}
Nach dem Login kopieren

Ausgabe

-5
Nach dem Login kopieren

Zeitliche Komplexität: O(1), , da die Ausführung der Operation eine konstante Zeit benötigt.

Raumkomplexität: O(1), weil es keinen zusätzlichen Platz beansprucht.

Fazit

In diesem Artikel lernen wir, zwei ganze Zahlen zu dividieren, ohne Multiplikations-, Divisions- oder Modulo-Operatoren zu verwenden. Wir haben gelernt, Probleme auf unterschiedliche Weise und mit unterschiedlicher Effizienz zu lösen. Sie verwenden einfache Mathematik, Bitoperationen und logarithmische Funktionen. Unter diesen ist die Verwendung der logarithmischen Funktion die effizienteste Methode, da ihre Zeitkomplexität O(1) beträgt, was die kleinste aller Methoden ist.

Ich hoffe, dieser Artikel hat Ihnen geholfen, alle Konzepte zu diesem Thema zu lösen.

Das obige ist der detaillierte Inhalt vonDividieren Sie zwei ganze Zahlen, ohne die Multiplikations-, Divisions- und Modulo-Operatoren zu verwenden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Dividieren Sie zwei ganze Zahlen, ohne die Multiplikations-, Divisions- und Modulo-Operatoren zu verwenden Dividieren Sie zwei ganze Zahlen, ohne die Multiplikations-, Divisions- und Modulo-Operatoren zu verwenden Sep 21, 2023 pm 12:41 PM

Bei diesem Problem müssen wir nur zwei ganze Zahlen dividieren, ohne Multiplikations-, Divisions- und Modulo-Operatoren zu verwenden. Obwohl wir Additions-, Multiplikations- oder Bitoperationen verwenden können. Die Problemstellung besagt, dass wir zwei ganze Zahlen x und y erhalten. Ohne Multiplikation, Division oder den Modulo-Operator müssen wir den Quotienten von x dividiert durch y bestimmen. Beispiel Eingabe: x=15, y=5 Ausgabe: 3 Eingabe: x=10, y=4 Ausgabe: 2 Eingabe: x=-20, y=3 Ausgabe: -6 Methode Methode 1 (verwenden Sie einfache Mathematik) hier Als Methode verwenden wir einen einfachen mathematischen Algorithmus. Hier ist eine Schritt-für-Schritt-Erklärung der Schritte, die wir befolgen werden – wir werden den Divisor (d. h. y) so lange vom Dividenden (d. h. x) subtrahieren, bis x größer oder gleich y ist. wenn y größer als x ist

Kenntnisse im Betrieb von Oracle-Datenbanken: Detaillierte Erläuterung des Subtraktionsvorgangs Kenntnisse im Betrieb von Oracle-Datenbanken: Detaillierte Erläuterung des Subtraktionsvorgangs Mar 02, 2024 pm 06:15 PM

Als leistungsstarkes relationales Datenbankverwaltungssystem bietet die Oracle-Datenbank eine Fülle von Rechenoperationen, um den Benutzeranforderungen gerecht zu werden. Im täglichen Datenbankbetrieb ist die Subtraktionsoperation eine häufige und wichtige Operation. Sie kann uns dabei helfen, die Subtraktionsoperation von Daten zu realisieren, um die benötigten Ergebnisse zu erhalten. In diesem Artikel werden die Techniken im Zusammenhang mit Subtraktionsoperationen in der Oracle-Datenbank ausführlich erläutert und spezifische Codebeispiele gegeben, um den Lesern zu helfen, diese Funktion besser zu verstehen und zu verwenden. 1. Grundkonzepte von Subtraktionsoperationen in Oracle-Daten

PHP-genaue Division, um ein ganzzahliges Ergebnis zu erhalten PHP-genaue Division, um ein ganzzahliges Ergebnis zu erhalten Apr 09, 2024 pm 01:09 PM

Der Divisionsoperator (/) in PHP führt standardmäßig eine Gleitkommadivision durch. Wenn Sie das ganzzahlige Ergebnis des Quotienten erhalten müssen, können Sie die folgende Methode verwenden: Funktion „floor()“: Runden Sie die Ganzzahl ab (zum Beispiel: „floor(“). 10,5)=10) ceil() Funktion: Eine ganze Zahl aufrunden (zum Beispiel: ceil(10,5)=11) Kürzungsoperator (//): Auf eine ganze Zahl kürzen Modulo-Operator (%): Überprüfen Sie, ob der Rest 0 ist, um festzustellen ob das Ergebnis eine ganze Zahl ist

So führen Sie eine Subtraktion in Excel durch So führen Sie eine Subtraktion in Excel durch Mar 20, 2024 pm 02:46 PM

Excel ist eine unverzichtbare Bürosoftware in unserem täglichen Büro, daher werden einige Leute, die Excel zum ersten Mal lernen, immer auf einige kleine Probleme stoßen, wie zum Beispiel, wie man in Excel subtrahiert. Heute werde ich mit meinen Freunden sprechen. Teilen Sie dies Die einzelnen Bedienungsschritte finden Sie unten. Freunde, schauen Sie sich das genauer an! 1. Öffnen Sie zunächst das Excel-Datenblatt. Excel möchte die Subtraktion über Formeln durchführen, und Formeln orientieren sich im Allgemeinen am Gleichheitszeichen. Geben Sie daher in den Zellen, die subtrahiert werden müssen, zunächst = ein (wie unten rot dargestellt). Teil gezeigt). 2. Klicken Sie dann auf die Zelle, in der sich der Minuend befindet. Der Name der Zelle wird automatisch zur Formel hinzugefügt (wie im roten Kreis in der Abbildung unten dargestellt). 3

Entdecken Sie die Bedeutung und Anwendung von Python-Operatoren: Addition, Subtraktion, Multiplikation und Division Entdecken Sie die Bedeutung und Anwendung von Python-Operatoren: Addition, Subtraktion, Multiplikation und Division Jan 20, 2024 am 09:21 AM

Ein tiefgreifendes Verständnis der Python-Operatoren: Addition, Subtraktion, Multiplikation, Division und ihrer Bedeutung erfordert spezifische Codebeispiele. In der Programmiersprache Python sind Operatoren eines der wichtigen Werkzeuge zur Durchführung verschiedener mathematischer Operationen. Unter ihnen sind Addition, Subtraktion, Multiplikation und Division die gebräuchlichsten Operatoren. In diesem Artikel wird die Bedeutung dieser Operatoren und ihre Verwendung in Python erläutert. Additionsoperator (+) Der Additionsoperator wird zum Addieren zweier Zahlen verwendet und kann auch zum Verketten zweier Zeichenfolgen verwendet werden. x=5y=3Ergebnis

So erstellen Sie subtraktives Design und verschönern Diagramme in PPT So erstellen Sie subtraktives Design und verschönern Diagramme in PPT Mar 20, 2024 pm 02:00 PM

1. Der grundlegende Verschönerungsoperationsraum von Diagrammen ist klein und störende Anzeigeelemente werden entfernt. Zu den Elementen, die die Daten beeinträchtigen, gehören Hintergrund, Rasterlinien und Legenden. Sie können gelöscht, verschönert und Schatten abgemildert werden. 2. Geben Sie [PPT] ein, [Öffnen] Diagramm, klicken Sie auf [Diagramm], wählen Sie [+] und deaktivieren Sie es, wie in der Abbildung gezeigt. 3. [Rechtsklick], um das Format der Datenreihe festzulegen, klicken Sie auf [Füllen] und aktivieren Sie [Keine Füllung]. Klicken Sie auf [Datenspalte], klicken Sie auf [Schatten], um den Schatten zu entfernen, wählen Sie [Umriss] und färben Sie [Text] weiß. 4. Klicken Sie auf [Skalierung], wählen Sie [Skalenmarkierung] und passen Sie [Thementyp] Keine, [Farbe] Weiß an, wie in der Abbildung gezeigt. 5. Löschen Sie die Stellen, die gelöscht werden müssen, um die Tabelle übersichtlicher zu gestalten. Fügen Sie beim Entwerfen nicht blind Dinge hinzu, sondern gehen Sie entsprechend vor.

Verwenden Sie pthread, um Matrixaddition und -subtraktion in C/C++ zu implementieren Verwenden Sie pthread, um Matrixaddition und -subtraktion in C/C++ zu implementieren Aug 28, 2023 am 09:05 AM

Hier erfahren Sie, wie Sie eine Matrixaddition und -subtraktion in einer Multithread-Umgebung durchführen. pthread wird verwendet, um mehrere Threads gleichzeitig in C oder C++ auszuführen. Es gibt zwei Matrizen A und B. Die Reihenfolge jeder Matrix ist (mxn). Jeder Thread erhält jede Zeile und führt eine Addition oder Subtraktion durch. Für m Zeilen gibt es also m verschiedene Threads. Beispiel#include<iostream>#include<pthread.h>#include<cstdlib>#include<cstdint>#defineCORE3#defineMAX3usingnamespacestd;i

Warum ergibt die Division von 8 durch -3 in PHP 0? Warum ergibt die Division von 8 durch -3 in PHP 0? Jan 26, 2024 am 10:36 AM

Warum ist PHP8%-3 gleich 0? Bei der PHP-Programmierung stoßen wir manchmal auf seltsame und verwirrende Probleme. Eine besonders interessante Frage ist, warum der Ausdruck 8%-3 in PHP gleich 0 ist. Um diese Frage zu beantworten, müssen wir zunächst die modulare Operation (Restoperation) in PHP verstehen. Modulo-Arithmetik ist eine mathematische Operation zur Berechnung des Rests nach der Division einer Zahl durch eine andere. In PHP wird das Prozentzeichen (%) zur Darstellung modularer Arithmetik verwendet. Wenn in der Mathematik eine Zahl durch eine andere Zahl dividiert wird und der Rest 0 ist, sagen wir das

See all articles