Dado un número grande (representado como una string) que tiene que dividirse por otro número (representado como tipo de datos int). El gran número puede ser muy grande, lo que ni siquiera cabe en C++. La tarea es encontrar la división de estos números.
Ejemplos:
Input : number = 1260257 divisor = 37 Output : 34061 (See below diagram) Input : number = 12313413534672234 divisor = 754 Output : 16330787181262 Input : number = 1248163264128256512 divisor = 125 Output : 9985306113026052
Ya hemos discutido Multiplicar números grandes representados como strings .
Usamos matemáticas escolares básicas como se muestra en el siguiente ejemplo.
Como el dividendo y el resultado pueden ser muy grandes, los almacenamos en una string. Primero tomamos dígitos que son divisibles por número. Después de esto, tome cada dígito y almacene el resultado en una string.
Implementación:
C++
// C++ program to implement division with large // number #include <bits/stdc++.h> using namespace std; // A function to perform division of large numbers string longDivision(string number, int divisor) { // As result can be very large store it in string string ans; // Find prefix of number that is larger // than divisor. int idx = 0; int temp = number[idx] - '0'; while (temp < divisor) temp = temp * 10 + (number[++idx] - '0'); // Repeatedly divide divisor with temp. After // every division, update temp to include one // more digit. while (number.size() > idx) { // Store result in answer i.e. temp / divisor ans += (temp / divisor) + '0'; // Take next digit of number temp = (temp % divisor) * 10 + number[++idx] - '0'; } // If divisor is greater than number if (ans.length() == 0) return "0"; // else return ans return ans; } // Driver program to test longDivison() int main() { string number = "1248163264128256512"; int divisor = 125; cout << longDivision(number, divisor); return 0; }
Java
// Java program to implement division // with large number class GFG { public static String longDivision( String number, int divisor) { // As result can be very // large store it in string // but since we need to modify // it very often so using // string builder StringBuilder result = new StringBuilder(); // We will be iterating // the dividend so converting // it to char array char[] dividend = number.toCharArray(); // Initially the carry // would be zero int carry = 0; // Iterate the dividend for ( int i = 0; i < dividend.length; i++) { // Prepare the number to // be divided int x = carry * 10 + Character.getNumericValue( dividend[i]); // Append the result with // partial quotient result.append(x / divisor); // Prepare the carry for // the next Iteration carry = x % divisor; } // Remove any leading zeros for ( int i = 0; i < result.length(); i++) { if ( result.charAt(i) != '0') { // Return the result return result.substring(i); } } // Return empty string // if number is empty return ""; } // Driver code public static void main( String[] args) { String number = "1248163264128256512"; int divisor = 125; System.out.println( longDivision( number, divisor)); } } // This code is contributed by Saurabh321Gupta.
Python3
# Python3 program to implement division # with large number import math # A function to perform division of # large numbers def longDivision(number, divisor): # As result can be very large # store it in string ans = ""; # Find prefix of number that # is larger than divisor. idx = 0; temp = ord(number[idx]) - ord('0'); while (temp < divisor): temp = (temp * 10 + ord(number[idx + 1]) - ord('0')); idx += 1; idx += 1; # Repeatedly divide divisor with temp. # After every division, update temp to # include one more digit. while ((len(number)) > idx): # Store result in answer i.e. temp / divisor ans += chr(math.floor(temp // divisor) + ord('0')); # Take next digit of number temp = ((temp % divisor) * 10 + ord(number[idx]) - ord('0')); idx += 1; ans += chr(math.floor(temp // divisor) + ord('0')); # If divisor is greater than number if (len(ans) == 0): return "0"; # else return ans return ans; # Driver Code number = "1248163264128256512"; divisor = 125; print(longDivision(number, divisor)); # This code is contributed by mits
C#
// C# program to implement division // with large number using System; class GFG { // A function to perform division of large numbers static string longDivision(string number, int divisor) { // As result can be very large store it in string string ans = ""; // Find prefix of number that is larger // than divisor. int idx = 0; int temp = (int)(number[idx] - '0'); while (temp < divisor) { temp = temp * 10 + (int)(number[idx + 1] - '0'); idx++; } ++idx; // Repeatedly divide divisor with temp. After // every division, update temp to include one // more digit. while (number.Length > idx) { // Store result in answer i.e. temp / divisor ans += (char)(temp / divisor + '0'); // Take next digit of number temp = (temp % divisor) * 10 + (int)(number[idx] - '0'); idx++; } ans += (char)(temp / divisor + '0'); // If divisor is greater than number if (ans.Length == 0) return "0"; // else return ans return ans; } // Driver code static void Main() { string number = "1248163264128256512"; int divisor = 125; Console.WriteLine(longDivision(number, divisor)); } } // This code is contributed by mits
PHP
<?php // PHP program to implement division // with large number // A function to perform division of // large numbers function longDivision($number, $divisor) { // As result can be very large // store it in string $ans = ""; // Find prefix of number that is // larger than divisor. $idx = 0; $temp = ord($number[$idx]) - 48; while ($temp < $divisor) $temp = $temp * 10 + ord($number[++$idx]) - 48; // Repeatedly divide divisor with temp. // After every division, update temp to // include one more digit. ++$idx; while (strlen($number) > $idx) { // Store result in answer i.e. temp / divisor $ans .= chr((int)($temp / $divisor) + 48); // Take next digit of number $temp = ($temp % $divisor) * 10 + ord($number[$idx]) - 48; ++$idx; } $ans .= chr((int)($temp / $divisor) + 48); // If divisor is greater than number if (strlen($ans) == 0) return "0"; // else return ans return $ans; } // Driver Code $number = "1248163264128256512"; $divisor = 125; print(longDivision($number, $divisor)); // This code is contributed by mits ?>
Javascript
<script> // Javascript program to implement division // with large number function longDivision(number,divisor) { // As result can be very // large store it in string // but since we need to modify // it very often so using // string builder let ans=""; // We will be iterating // the dividend so converting // it to char array // Initially the carry // would be zero let idx = 0; let temp=number[idx]-'0'; while (temp < divisor) { temp = (temp * 10 + (number[idx + 1]).charCodeAt(0) - ('0').charCodeAt(0)); idx += 1; } idx += 1; while(number.length>idx) { // Store result in answer i.e. temp / divisor ans += String.fromCharCode (Math.floor(temp / divisor) + ('0').charCodeAt(0)); // Take next digit of number temp = ((temp % divisor) * 10 + (number[idx]).charCodeAt(0) - ('0').charCodeAt(0)); idx += 1; } ans += String.fromCharCode (Math.floor(temp / divisor) + ('0').charCodeAt(0)); //If divisor is greater than number if(ans.length==0) return "0"; //else return ans return ans; } // Driver Code let number = "1248163264128256512"; let divisor = 125; document.write(longDivision( number, divisor)); // This code is contributed // by avanitrachhadiya2155 </script>
9985306113026052
Complejidad de tiempo: O(n 2 !), donde n denota la longitud de la string.
Espacio Auxiliar: O(n).
Este artículo es una contribución de nuclode . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA