Table des matières
Exemple
Méthode
Méthode 1 (utiliser des mathématiques simples)
Maison développement back-end C++ Divisez deux entiers sans utiliser les opérateurs de multiplication, de division et de modulo

Divisez deux entiers sans utiliser les opérateurs de multiplication, de division et de modulo

Sep 21, 2023 pm 12:41 PM
Soustraction Division entière bitshift

Divisez deux entiers sans utiliser les opérateurs de multiplication, de division et de modulo

Dans ce problème, il suffit de diviser deux entiers sans utiliser les opérateurs de multiplication, de division et de modulo. Bien que nous puissions utiliser des opérations d’addition, de multiplication ou de bits.

L'énoncé du problème indique que nous obtiendrons deux entiers x et y. Sans utiliser la multiplication, la division ou l'opérateur modulo, nous devons déterminer le quotient de x divisé par y.

Exemple

Entrée : x=15, y=5

Sortie : 3

Entrée : x=10, y=4

Sortie : 2

Entrée : x=-20, y=3

Sortie : -6

Méthode

Méthode 1 (utiliser des mathématiques simples)

Dans cette méthode, nous utiliserons un algorithme mathématique simple. Vous trouverez ci-dessous des instructions étape par étape sur ce que nous suivrons -

  • Nous continuerons à soustraire le diviseur (c'est-à-dire y) du dividende (c'est-à-dire x) jusqu'à ce que x soit supérieur ou égal à y.

  • Lorsque y est supérieur à x, c'est-à-dire que le diviseur est supérieur au dividende, le dividende devient le reste et le nombre de soustractions devient le quotient.

  • Stockez le nombre de fois que la soustraction est effectuée dans une variable et renvoyez-la, c'est notre résultat souhaité.

Exemple

Ce qui suit est l'implémentation C++ de l'algorithme &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;
}
Copier après la connexion

Sortie

-10737
Copier après la connexion

Complexité temporelle : O(a/b)

Complexité spatiale : O(1)

Méthode 2 (en utilisant des opérations sur les bits)

  • Puisque n'importe quel nombre peut être représenté sous la forme de 0 ou de 1, le quotient peut être représenté sous forme binaire à l'aide de l'opérateur de décalage.

  • Utilisez une boucle for pour parcourir les positions de bits du diviseur de 31 à 1.

  • Trouvez le premier bit où le diviseur, c'est-à-dire b<<
  • Lors de la vérification de la position suivante, ajoutez le résultat à la variable temp pour vous assurer que temp+(b<<
  • Mettez à jour le quotient à chaque fois en calculant le quotient

    OR 1<<

  • Retournez au quotient après avoir mis à jour le symbole correspondant.

Exemple

Ce qui suit est l'implémentation C++ de la méthode ci-dessus -

#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;
}
Copier après la connexion

Sortie

9
-3
Copier après la connexion

Complexité temporelle : O(log(a))

Complexité spatiale : O(1), car il n'utilise aucun espace supplémentaire.

Méthode 3 (en utilisant la fonction logarithmique)

Dans cette méthode, nous utiliserons une simple fonction logarithmique pour calculer le quotient.

Comme nous le savons tous,

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

peut être encore modifié en

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

C'est donc l'idée de base pour résoudre le problème donné en utilisant cette méthode efficace.

Voici les instructions étape par étape pour la méthode que nous suivrons -

  • Si l'un d'eux (c'est-à-dire le dividende ou le diviseur) est 0, nous renverrons 0.

  • Maintenant, nous allons vérifier le symbole à l'aide de la fonction OU exclusif (XOR) pour stocker le symbole dans une variable.

  • Si le diviseur est 1, le dividende est restitué directement.

  • Maintenant, déclarez une variable et utilisez la fonction

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

  • Log et exp sont des fonctions intégrées en C++. La fonction log renvoie le logarithme népérien du nombre d'entrée et exp renvoie une valeur égale à e plus la valeur d'entrée.

Exemple

Ce qui suit est l'implémentation C++ de la méthode ci-dessus -

#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;
}
Copier après la connexion

Sortie

-5
Copier après la connexion

Complexité temporelle : O(1), , car il faut un temps constant pour effectuer l'opération.

Complexité spatiale : O(1), car il n'utilise aucun espace supplémentaire.

Conclusion

Dans cet article, nous apprenons à diviser deux entiers sans utiliser d'opérateurs de multiplication, de division ou de modulo. Nous avons appris à résoudre les problèmes de différentes manières avec différentes efficacités. Ils utilisent des mathématiques simples, des opérations sur bits et des fonctions logarithmiques. Parmi elles, l’utilisation de la fonction logarithmique est la méthode la plus efficace car sa complexité temporelle est O(1), qui est la plus petite de toutes les méthodes.

J'espère que cet article vous a aidé à résoudre tous les concepts concernant ce sujet.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Divisez deux entiers sans utiliser les opérateurs de multiplication, de division et de modulo Divisez deux entiers sans utiliser les opérateurs de multiplication, de division et de modulo Sep 21, 2023 pm 12:41 PM

Dans ce problème, il suffit de diviser deux entiers sans utiliser les opérateurs de multiplication, de division et de modulo. Bien que nous puissions utiliser des opérations d’addition, de multiplication ou de bits. L’énoncé du problème indique que nous obtiendrons deux entiers x et y. Sans utiliser la multiplication, la division ou l'opérateur modulo, nous devons déterminer le quotient de x divisé par y. Exemple d'entrée : x=15, y=5 Sortie : 3 Entrée : x=10, y=4 Sortie : 2 Entrée : x=-20, y=3 Sortie : -6 Méthode Méthode 1 (utiliser des mathématiques simples) ici Dans ce méthode, nous utiliserons un algorithme mathématique simple. Voici une explication étape par étape des étapes que nous suivrons : nous continuerons à soustraire le diviseur (c'est-à-dire y) du dividende (c'est-à-dire x) jusqu'à ce que x soit supérieur ou égal à y. quand y est supérieur à x

Compétences en matière d'exploitation de base de données Oracle : explication détaillée de l'opération de soustraction Compétences en matière d'exploitation de base de données Oracle : explication détaillée de l'opération de soustraction Mar 02, 2024 pm 06:15 PM

En tant que puissant système de gestion de bases de données relationnelles, la base de données Oracle fournit une multitude d'opérations informatiques pour répondre aux besoins des utilisateurs. Dans les opérations quotidiennes de base de données, l'opération de soustraction est une opération courante et importante. Elle peut nous aider à mettre en œuvre l'opération de soustraction des données pour obtenir les résultats dont nous avons besoin. Cet article discutera en détail des techniques liées aux opérations de soustraction dans la base de données Oracle et donnera des exemples de code spécifiques pour aider les lecteurs à mieux comprendre et utiliser cette fonction. 1. Concepts de base des opérations de soustraction dans les données Oracle

Division exacte PHP pour obtenir un résultat entier Division exacte PHP pour obtenir un résultat entier Apr 09, 2024 pm 01:09 PM

L'opérateur de division (/) en PHP effectue une division en virgule flottante par défaut Si vous avez besoin d'obtenir le résultat entier du quotient, vous pouvez utiliser la méthode suivante : fonction floor() : arrondir l'entier (par exemple : floor( 10.5)=10) ceil() Fonction : arrondir un entier (par exemple : ceil(10.5)=11) Opérateur de troncature (//) : tronquer à un entier Opérateur modulo (%) : vérifier si le reste est 0 pour déterminer si le résultat est un entier

Comment faire une soustraction dans Excel Comment faire une soustraction dans Excel Mar 20, 2024 pm 02:46 PM

Excel est un logiciel de bureau indispensable dans notre bureau quotidien, donc pour certaines personnes qui apprennent Excel pour la première fois, elles rencontreront toujours quelques petits problèmes, comme comment faire des soustractions dans Excel. Aujourd'hui, je vais en parler à mes amis. Partagez ceci. Étape de fonctionnement. Les étapes de fonctionnement spécifiques sont ci-dessous. Amis, venez voir de plus près ! 1. Tout d'abord, ouvrez la feuille de données Excel. Excel souhaite effectuer une soustraction via des formules, et les formules sont généralement guidées par le signe égal, donc dans les cellules qui doivent être soustraites, entrez d'abord =, (comme indiqué en rouge ci-dessous) encerclé. partie illustrée). 2. Ensuite, cliquez sur la cellule où se trouve le menu et le nom de la cellule sera automatiquement ajouté à la formule (comme indiqué dans le cercle rouge dans la figure ci-dessous). 3

Explorez la signification et l'application des opérateurs Python : addition, soustraction, multiplication et division Explorez la signification et l'application des opérateurs Python : addition, soustraction, multiplication et division Jan 20, 2024 am 09:21 AM

Compréhension approfondie des opérateurs Python : l'addition, la soustraction, la multiplication, la division et leur signification nécessitent des exemples de code spécifiques. Dans le langage de programmation Python, les opérateurs sont l'un des outils importants pour effectuer diverses opérations mathématiques. Parmi eux, l'addition, la soustraction, la multiplication et la division sont les opérateurs les plus courants. Cet article approfondira la signification de ces opérateurs et comment les utiliser en Python. Opérateur d'addition (+) L'opérateur d'addition est utilisé pour ajouter deux nombres et peut également être utilisé pour concaténer deux chaînes. x=5a=3résultat

Comment créer un design soustractif et embellir des graphiques en PPT Comment créer un design soustractif et embellir des graphiques en PPT Mar 20, 2024 pm 02:00 PM

1. L'espace d'opération d'embellissement de base des graphiques est petit et les éléments d'affichage interférents sont supprimés. Les éléments qui interfèrent avec les données incluent l'arrière-plan, les lignes de quadrillage et les légendes. Ils peuvent être supprimés, embellis et les ombres peuvent être adoucies. 2. Entrez le graphique [PPT], [Ouvrir], cliquez sur [Graphique], sélectionnez [+] et décochez-le [cocher], comme indiqué sur la figure. 3. [Clic droit] pour définir le format de la série de données, cliquez sur [Remplir] et cochez [Pas de remplissage]. Cliquez sur [Colonne de données], cliquez sur [Ombre] pour supprimer l'ombre, sélectionnez [Contour] et colorez [Texte] en blanc. 4. Cliquez sur [Échelle], sélectionnez [Marque d'échelle], ajustez [Type de thème] Aucun, [Couleur] blanc, comme indiqué sur la figure. 5. Supprimez les endroits qui doivent être supprimés pour rendre le tableau plus clair. N'ajoutez pas aveuglément des éléments lors de la conception, faites-le de manière appropriée.

Utilisez pthread pour implémenter l'addition et la soustraction matricielles en C/C++ Utilisez pthread pour implémenter l'addition et la soustraction matricielles en C/C++ Aug 28, 2023 am 09:05 AM

Ici, nous verrons comment effectuer des additions et des soustractions matricielles à l'aide d'un environnement multithread. pthread est utilisé pour exécuter plusieurs threads simultanément en C ou C++. Il existe deux matrices A et B. L'ordre de chaque matrice est (mxn). Chaque fil obtiendra chaque ligne et effectuera une addition ou une soustraction. Donc, pour m lignes, il y a m threads différents. Exemple#include<iostream>#include<pthread.h>#include<cstdlib>#include<cstdint>#defineCORE3#defineMAX3usingnamespacestd;i

Pourquoi diviser 8 par -3 en PHP donne-t-il 0 ? Pourquoi diviser 8 par -3 en PHP donne-t-il 0 ? Jan 26, 2024 am 10:36 AM

Pourquoi PHP8%-3 est-il égal à 0 ? En programmation PHP, nous rencontrons parfois des problèmes étranges et déroutants. Une question particulièrement intéressante est la suivante : pourquoi l’expression 8%-3 en PHP est-elle égale à 0 ? Pour répondre à cette question, nous devons d’abord comprendre le fonctionnement modulaire (opération restante) en PHP. L'arithmétique modulo est une opération mathématique utilisée pour calculer le reste après avoir divisé un nombre par un autre. En PHP, le signe pourcentage (%) est utilisé pour représenter l'arithmétique modulaire. En mathématiques, lorsqu’un nombre est divisé par un autre nombre et que le reste est 0, on dit que

See all articles