Represent a number as the sum of positive numbers ending with 9

Given an integer N, the task is to check if N can be expressed as a sum of integers having 9 as the last digit (9, 19, 29, 39…), or not. If found to be true, then find the minimum count of such integers required to obtain N. Otherwise print -1.
Examples:
Input: N = 156
Output: 4
Explanation:
156 = 9 + 9 + 9 + 129Input: N = 60
Output: -1
Explanation:
No possible way to obtain sum 60 from numbers having 9 as the last digit.
Naive Approach: This problem can be viewed as a variation of the Coin change problem. For this problem, the coins can be replaced with [9, 19, 29, 39…. up to the last number smaller than N that ends with 9].
Time Complexity: O(N2)
Auxiliary Space: O(N)
Efficient Approach: The above approach can be optimized based on the observation that if the last digit of N is K, then exactly (10 – K) minimum numbers are required to form N.
A sum N can be obtained by adding 10 – K numbers, where K is the last digit of N.
Therefore, sum N can be obtained by adding 9, (9 – K) times and adding N – (9 * (9 – K)) finally.
Follow the steps below to solve the problem:
- Extract the last digit of the given number, K = N % 10
- Using the above observation, a total of (10 – K) numbers are required. Now, calculate 9 * (9 – K), as the first 9 – K numbers required to obtain N is 9.
- Now, calculate N – 9 * (9 – K) and store in a variable, say z. If z is greater than or equal to 9 and has 9 as its last digit, print 10 – K as the answer. Otherwise, print -1.
Below is the implementation of the above approach:
C++
// C++ program for the above approach#include <bits/stdc++.h>using namespace std;// Function to find the minimum count// of numbers ending with 9 to form Nint minCountOfNumbers(int N){ // Extract last digit of N int k = N % 10; // Calculate the last digit int z = N - (9 * (9 - k)); // If the last digit // satisfies the condition if (z >= 9 && z % 10 == 9) { return 10 - k; } else return -1;}// Driver Codeint main(){ int N = 156; cout << minCountOfNumbers(N); return 0;} |
Java
// Java program for the above approachimport java.util.*;class GFG{// Function to find the minimum count// of numbers ending with 9 to form Nstatic int minCountOfNumbers(int N){ // Extract last digit of N int k = N % 10; // Calculate the last digit int z = N - (9 * (9 - k)); // If the last digit // satisfies the condition if (z >= 9 && z % 10 == 9) { return 10 - k; } else return -1;}// Driver Codepublic static void main(String[] args){ int N = 156; System.out.print(minCountOfNumbers(N));}}// This code is contributed by 29AjayKumar |
Python3
# Python3 program for the above approach# Function to find the minimum count# of numbers ending with 9 to form Ndef minCountOfNumbers(N): # Extract last digit of N k = N % 10 # Calculate the last digit z = N - (9 * (9 - k)) # If the last digit # satisfies the condition if (z >= 9 and z % 10 == 9): return 10 - k else: return -1# Driver Codeif __name__ == '__main__': N = 156 print(minCountOfNumbers(N))# This code is contributed by mohit kumar 29 |
C#
// C# program for the above approachusing System;class GFG{// Function to find the minimum count// of numbers ending with 9 to form Nstatic int minCountOfNumbers(int N){ // Extract last digit of N int k = N % 10; // Calculate the last digit int z = N - (9 * (9 - k)); // If the last digit // satisfies the condition if (z >= 9 && z % 10 == 9) { return 10 - k; } else return -1;}// Driver Codepublic static void Main(String[] args){ int N = 156; Console.Write(minCountOfNumbers(N));}}// This code is contributed by 29AjayKumar |
Javascript
<script>// java script program for the above approach// Function to find the minimum count// of numbers ending with 9 to form Nfunction minCountOfNumbers(N){ // Extract last digit of N let k = N % 10; // Calculate the last digit let z = N - (9 * (9 - k)); // If the last digit // satisfies the condition if (z >= 9 && z % 10 == 9) { return 10 - k; } else { return -1; }} // Driver Code let N = 156; document.write(minCountOfNumbers(N));// This code is contributed by sravan kumar</script> |
4
Time Complexity: O(1)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



