Append a digit in the end to make the number equal to the length of the remaining string
Last Updated :
04 Jun, 2022
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++
// C++ implementation of the approach
#include <bits/stdc++.h>
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
<script>
// Javascript implementation of the approach
// Function to return the required digit
function 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 code
var s = "abcd0";
var n = s.length;
document.write( find_digit(s, n));
</script>
Time Complexity: O(n)
Auxiliary Space: O(1)
Similar Reads
Check length of a string is equal to the number appended at its last Given a string that (may) be appended with a number at last. You need to find whether the length of string excluding that number is equal to that number. For example for "helloworld10", answer is True as helloworld consist of 10 letters. Length of String is less than 10, 000. Examples : Input: str =
11 min read
Round the given number to nearest multiple of 10 | Set-2 Given a large positive integer represented as a string str. The task is to round this number to the nearest multiple of 10. Examples: Input: str = "99999999999999993"Output: 99999999999999990 Input: str = "99999999999999996" Output: 100000000000000000 Approach: A solution to the same problem has bee
10 min read
Rearrange a string in the form of integer sum followed by the minimized character Given a string including lowercase alphabets and numeric digits. The task is to construct another string which consists of the sum of digits followed by the sum of all alphabets minimized to a single character. If no numeric digit is present add 0 to the string. Note: Alphabet summation is done in t
5 min read
Move all digits to the beginning of a given string Given a string S, the task is to move all the digits present in the string, to the beginning of the string. Examples: Input: S = âGeeks4forGeeks123âOutput: 4123GeeksforGeeksExplanation:The given string contains digits 4, 1, 2, and 3. Moving all the digits to the beginning of the string modifies the
7 min read
K-th digit from the end of a number Given an integer N, the task is to find the Kth digit from the end of an integer N. If the Kth digit is not present, then print -1. Examples: Input: N = 2354, K = 2Output: 5 Input: N = 1234, K = 1Output: 4 Naive Approach: This simplest approach to solve this problem is converting the integer N to st
11 min read