GFG App
Open App
Browser
Continue

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

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:
Length of “geeksforgeeks” is 13
So, 3 must be appended at the end of 1.
Input: str = “abcd0”
Output:

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++

 `// C++ implementation of the approach` `#include ` `using` `namespace` `std;`   `// Function to return the required digit` `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[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 code` `int` `main()` `{` `    ``string s = ``"abcd0"``;` `    ``int` `n = s.length();`   `    ``cout << find_digit(s, n);`   `    ``return` `0;` `}`

## Java

 `// Java implementation of the approach` `import` `java.io.*;`   `class` `GFG ` `{`   `// Function to return the required digit` `static` `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 code` `public` `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

 `# Python3 implementation of the approach`   `# Function to return the required digit` `def` `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 code` `if` `__name__ ``=``=` `"__main__"``:` `    ``s ``=` `"abcd0"` `    ``n ``=` `len``(s)` `    ``print``(find_digit(s, n))`   `# This code is contributed by` `# sanjeev2552`

## C#

 `// C# implementation of the approach` `using` `System;` `    `  `class` `GFG ` `{`   `// Function to return the required digit` `static` `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 code` `public` `static` `void` `Main (String[] args)` `{` `    ``String s = ``"abcd0"``;` `    ``int` `n = s.Length;` `    `  `    ``Console.Write(find_digit(s, n));` `}` `}`   `// This code is contributed by PrinciRaj1992 `

## Javascript

 ``

Output:

`4`

Time Complexity: O(n)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up