Append a digit in the end to make the number equal to the length of the remaining string - GeeksforGeeks

11 Jun, 2021
Given a string str in which an integer is appended in the end (with or without leading zeroes). The task is to find a single digit from the range [0, 9] that must be appended in the end of the integer so that the number becomes equal to the length of remaining string. Print -1 if its not possible.Examples:  
Input: str = “geeksforgeeks1” Output: 3 Length of “geeksforgeeks” is 13 So, 3 must be appended at the end of 1.Input: str = “abcd0” Output: 4  
 
Approach: Find the number appended in the end of the string say num and append a 0 in the end which is the least digit possible i.e. num = num * 10. Now find the length of the remaining string ignoring the numeric from the end say len. Now the digit which must be appended will be digit = len – num. If digit is in the range [0, 9] then print it else print -1.Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std; // Function to return the required digitint find_digit(string s, int n){     // To store the position of the first    // numeric digit in the string    int first_digit = -1;    for (int i = n - 1; i >= 0; i--) {        if (s[i] < '0' || s[i] > '9') {            first_digit = i;            break;        }    }    first_digit++;     // To store the length of the    // string without the numeric    // digits in the end    int s_len = first_digit;     // pw stores the current power of 10    // and num is to store the number    // which is appended in the end    int num = 0, pw = 1;    int i = n - 1;    while (i >= 0) {         // If current character is        // a numeric digit        if (s[i] >= '0' && s[i] <= '9') {             // Get the current digit            int digit = s[i] - '0';             // Build the number            num = num + (pw * digit);             // If number exceeds the length            if (num >= s_len)                return -1;             // Next power of 10            pw = pw * 10;        }        i--;    }     // Append 0 in the end    num = num * 10;     // Required number that must be added    int req = s_len - num;     // If number is not a single digit    if (req > 9 || req < 0)        return -1;    return req;} // Driver codeint main(){    string s = "abcd0";    int n = s.length();     cout << find_digit(s, n);     return 0;}
// Java implementation of the approachimport java.io.*; class GFG{ // Function to return the required digitstatic int find_digit(String s, int n){     // To store the position of the first    // numeric digit in the string    int first_digit = -1;    for (int i = n - 1; i >= 0; i--)    {        if (s.charAt(i) < '0' ||            s.charAt(i) > '9')        {            first_digit = i;            break;        }    }    first_digit++;     // To store the length of the    // string without the numeric    // digits in the end    int s_len = first_digit;     // pw stores the current power of 10    // and num is to store the number    // which is appended in the end    int num = 0, pw = 1;    int i = n - 1;    while (i >= 0)    {         // If current character is        // a numeric digit        if (s.charAt(i) >= '0' &&            s.charAt(i) <= '9')        {             // Get the current digit            int digit = s.charAt(i) - '0';             // Build the number            num = num + (pw * digit);             // If number exceeds the length            if (num >= s_len)                return -1;             // Next power of 10            pw = pw * 10;        }        i--;    }     // Append 0 in the end    num = num * 10;     // Required number that must be added    int req = s_len - num;     // If number is not a single digit    if (req > 9 || req < 0)        return -1;    return req;} // Driver codepublic static void main (String[] args){    String s = "abcd0";    int n = s.length();         System.out.print(find_digit(s, n));}} // This code is contributed by vt_m
# Python3 implementation of the approach # Function to return the required digitdef find_digit(s, n):     # To store the position of the first    # numeric digit in the string    first_digit = -1    for i in range(n - 1, -1, -1):        if s[i] < '0' or s[i] > '9':            first_digit = i            break     first_digit += 1     # To store the length of the    # string without the numeric    # digits in the end    s_len = first_digit    num = 0    pw = 1    i = n - 1    while i >= 0:         # If current character is        # a numeric digit        if s[i] >= '0' and s[i] <= '9':             # Get the current digit            digit = ord(s[i]) - ord('0')             # Build the number            num = num + (pw * digit)             # If number exceeds the length            if num >= s_len:                return -1             # Next power of 10            pw = pw * 10         i -= 1     # Append 0 in the end    num = num * 10     # Required number that must be added    req = s_len - num     # If number is not a single digit    if req > 9 or req < 0:        return -1    return req # Driver codeif __name__ == "__main__":    s = "abcd0"    n = len(s)    print(find_digit(s, n)) # This code is contributed by# sanjeev2552
// C# implementation of the approachusing System;     class GFG{ // Function to return the required digitstatic int find_digit(String s, int n){     // To store the position of the first    // numeric digit in the string    int first_digit = -1, i;    for (i = n - 1; i >= 0; i--)    {        if (s[i] < '0' ||            s[i] > '9')        {            first_digit = i;            break;        }    }         first_digit++;     // To store the length of the    // string without the numeric    // digits in the end    int s_len = first_digit;     // pw stores the current power of 10    // and num is to store the number    // which is appended in the end    int num = 0, pw = 1;    i = n - 1;    while (i >= 0)    {         // If current character is        // a numeric digit        if (s[i] >= '0' &&            s[i] <= '9')        {             // Get the current digit            int digit = s[i] - '0';             // Build the number            num = num + (pw * digit);             // If number exceeds the length            if (num >= s_len)                return -1;             // Next power of 10            pw = pw * 10;        }        i--;    }     // Append 0 in the end    num = num * 10;     // Required number that must be added    int req = s_len - num;     // If number is not a single digit    if (req > 9 || req < 0)        return -1;    return req;} // Driver codepublic static void Main (String[] args){    String s = "abcd0";    int n = s.Length;         Console.Write(find_digit(s, n));}} // This code is contributed by PrinciRaj1992
<script> // Javascript implementation of the approach // Function to return the required digitfunction find_digit(s, n){     // To store the position of the first    // numeric digit in the string    var first_digit = -1;    for (var i = n - 1; i >= 0; i--) {        if (s[i] < '0' || s[i] > '9') {            first_digit = i;            break;        }    }    first_digit++;     // To store the length of the    // string without the numeric    // digits in the end    var s_len = first_digit;     // pw stores the current power of 10    // and num is to store the number    // which is appended in the end    var num = 0, pw = 1;    var i = n - 1;    while (i >= 0) {         // If current character is        // a numeric digit        if (s[i] >= '0' && s[i] <= '9') {             // Get the current digit            var digit = s[i] - '0';             // Build the number            num = num + (pw * digit);             // If number exceeds the length            if (num >= s_len)                return -1;             // Next power of 10            pw = pw * 10;        }        i--;    }     // Append 0 in the end    num = num * 10;     // Required number that must be added    var req = s_len - num;     // If number is not a single digit    if (req > 9 || req < 0)        return -1;    return req;} // Driver codevar s = "abcd0";var n = s.length;document.write( find_digit(s, n)); </script>
4
 
vt_m
princiraj1992
sanjeev2552
rrrtnx
gabaa406
number-digits
Numbers
Mathematical
Strings
Strings
Mathematical
Numbers
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Merge two sorted arrays
Modulo Operator (%) in C/C++ with Examples
Prime Numbers
Program to find GCD or HCF of two numbers
Print all possible combinations of r elements in a given array of size n
Reverse a string in Java
Longest Common Subsequence | DP-4
Check for Balanced Brackets in an expression (well-formedness) using Stack
Python program to check if a string is palindrome or not
KMP Algorithm for Pattern Searching