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

Input: 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:

1. Extract the last digit of the given number, K = N % 10
2. 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.
3. 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 ` `using` `namespace` `std; ` ` `  `// Function to find the minimum count ` `// of numbers ending with 9 to form N ` `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 Code ` `int` `main() ` `{ ` `    ``int` `N = 156; ` `    ``cout << minCountOfNumbers(N); ` ` `  `    ``return` `0; ` `}`

## Java

 `// Java program for the above approach ` `import` `java.util.*; ` ` `  `class` `GFG{ ` ` `  `// Function to find the minimum count ` `// of numbers ending with 9 to form N ` `static` `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 Code ` `public` `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 N ` `def` `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 Code ` `if` `__name__ ``=``=` `'__main__'``: ` `     `  `    ``N ``=` `156` `     `  `    ``print``(minCountOfNumbers(N)) ` ` `  `# This code is contributed by mohit kumar 29 `

## C#

 `// C# program for the above approach ` `using` `System; ` ` `  `class` `GFG{ ` ` `  `// Function to find the minimum count ` `// of numbers ending with 9 to form N ` `static` `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 Code ` `public` `static` `void` `Main(String[] args) ` `{ ` `    ``int` `N = 156; ` `     `  `    ``Console.Write(minCountOfNumbers(N)); ` `} ` `} ` ` `  `// This code is contributed by 29AjayKumar`

Output:

```4
```

Time Complexity: O(1)
Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.