Divide un gran número representado como una string

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.

division

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>
Producción

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *