Primera aparición de un dígito en una fracción dada

Dados tres números enteros a, b y c, encuentre la primera aparición de c en a/b después del punto decimal. Si no existe, imprima -1.
Ejemplos: 
 

Input : a = 2 b = 3 c = 6 
Output : 1 
Explanation: 
0.666666.. so 6 occurs at first place 
of a/b after decimal point

Input : a = 1 b = 4 c = 5 
Output : 2 
Explanation: 
1 / 4 = 0.25 which gives 5's position
to be 2.

Un enfoque ingenuo será realizar la división y mantener la parte decimal e iterar y verificar si el número dado existe o no. Esto no funcionará bien cuando se realizan divisiones como 2/3, ya que da 0,666666666, pero en el lenguaje de programación lo redondeará a 0,666667, por lo que obtendremos un 7 que tampoco existe en el a/b original. Un
enfoque eficiente será sea ​​el matemático, si modulamos cada vez a por b y lo multiplicamos por 10 obtenemos los enteros después de la parte decimal cada vez. El número de modulaciones requeridas será b ya que tendrá un máximo de b números enteros después del punto decimal. Entonces, lo comparamos con c y obtenemos nuestro valor deseado si está presente.
A continuación se muestra la implementación del enfoque anterior: 
 

C++

// CPP program to find first occurrence
// of c in a/b
#include <bits/stdc++.h>
using namespace std;
 
// function to print the first digit
int first(int a, int b, int c)
{
    // reduce the number to its mod
    a %= b;
 
    // traverse for every decimal places
    for (int i = 1; i <= b; i++)
    {
        // get every fraction places
        // when (a*10/b)/c
        a = a * 10;
         
        // check if it is equal to
        // the required integer
        if (a / b == c)
            return i;
         
        // mod the number
        a %= b;
    }
    return -1;
}
 
// driver program to test the above function
int main()
{
    int a = 1, b = 4, c = 5;
    cout << first(a, b, c);
    return 0;
}

Java

// Java program to find first occurrence
// of c in a/b
import java.util.*;
import java.lang.*;
 
public class GfG{
    // Function to print the first digit
    public static int first(int a, int b, int c)
    {
        // Reduce the number to its mod
        a %= b;
 
        // Traverse for every decimal places
        for (int i = 1; i <= b; i++)
        {
            // Get every fraction places
            // when (a*10/b)/c
            a = a * 10;
         
            // Check if it is equal to
            // the required integer
            if (a / b == c)
                return i;
         
            // Mod the number
            a %= b;
        }
        return -1;
    }
     
    // Driver function
    public static void main(String argc[]){
        int a = 1, b = 4, c = 5;
        System.out.println(first(a, b, c));
    }
     
}
/* This code is contributed by Sagar Shukla */

Python3

# Python3 program to find first occurrence
# of c in a/b
 
# function to print the first digit
def first( a , b , c ):
 
    # reduce the number to its mod
    a %= b
     
    # traverse for every decimal places
    for i in range(1, b + 1):
 
        # get every fraction places
        # when (a*10/b)/c
        a = a * 10
 
        # check if it is equal to
        # the required integer
        if int(a / b) == c:
            return i
         
        # mod the number
        a %= b
     
    return -1
 
# driver code to test the above function
a = 1
b = 4
c = 5
print(first(a, b, c))
 
# This code is contributed by "Sharad_Bhardwaj".

C#

// C# program to find first occurrence
// of c in a/b
using System;
 
public class GfG{
     
    // Function to print the first digit
    public static int first(int a, int b, int c)
    {
 
        // Reduce the number to its mod
        a %= b;
 
        // Traverse for every decimal places
        for (int i = 1; i <= b; i++)
        {
 
            // Get every fraction places
            // when (a*10/b)/c
            a = a * 10;
         
            // Check if it is equal to
            // the required integer
            if (a / b == c)
                return i;
         
            // Mod the number
            a %= b;
        }
 
        return -1;
    }
     
    // Driver function
    public static void Main() {
         
        int a = 1, b = 4, c = 5;
         
        Console.WriteLine(first(a, b, c));
    }
}
 
/* This code is contributed by vt_m */

PHP

<?php
// PHP program to find first
// occurrence of c in a/b
 
// function to print
// the first digit
function first( $a, $b, $c)
{
     
    // reduce the number
    // to its mod
    $a %= $b;
 
    // traverse for every
    // decimal places
    for ($i = 1; $i <= $b; $i++)
    {
         
        // get every fraction places
        // when (a*10/b)/c
        $a = $a * 10;
         
        // check if it is equal to
        // the required integer
        if ($a / $b == $c)
            return $i;
         
        // mod the number
        $a %= $b;
    }
    return -1;
}
 
    // Driver Code
    $a = 1; $b = 4; $c = 5;
    echo first($a, $b, $c);
 
// This code is contributed by anuj_67.
?>

Javascript

<script>
 
// JavaScript program to find first occurrence
// of c in a/b
 
    // Function to print the first digit
    function first(a, b, c)
    {
        // Reduce the number to its mod
        a %= b;
   
        // Traverse for every decimal places
        for (let i = 1; i <= b; i++)
        {
            // Get every fraction places
            // when (a*10/b)/c
            a = a * 10;
           
            // Check if it is equal to
            // the required integer
            if (a / b == c)
                return i;
           
            // Mod the number
            a %= b;
        }
        return -1;
    }
 
// Driver Code
 
        let a = 1, b = 4, c = 5;
         document.write(first(a, b, c));
 
// This code is contributed by chinmoy1997pal.
</script>
Producción

2

Complejidad del Tiempo : O(b)
Espacio Auxiliar : O(1)

Publicación traducida automáticamente

Artículo escrito por Striver 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 *