Given an integer **N**, the task is to find two positive integers **A** and **B** such that **A + B = N** and the sum of digits of **A** and **B** is minimum. Print the sum of digits of **A** and **B**.

**Examples:**

Input:N = 16Output:7

(10 + 6) = 16 and (1 + 0 + 6) = 7

is minimum possible.

Input:N = 1000Output:10

(900 + 100) = 1000

**Approach:** If **N** is a power of **10** then the answer will be **10** otherwise the answer will be the sum of digits of **N**. It is clear that the answer can not be smaller than the sum of digits of **N** because the sum of digits decreases whenever a carry is generated. Moreover, when **N** is a power of **10**, obviously the answer can not be **1**, so the answer will be **10**. Because **A** or **B** can not be **0** as both of them must be positive numbers.

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 minimum` `// possible sum of digits of A` `// and B such that A + B = n` `int` `minSum(` `int` `n)` `{` ` ` `// Find the sum of digits of n` ` ` `int` `sum = 0;` ` ` `while` `(n > 0) {` ` ` `sum += (n % 10);` ` ` `n /= 10;` ` ` `}` ` ` ` ` `// If num is a power of 10` ` ` `if` `(sum == 1)` ` ` `return` `10;` ` ` ` ` `return` `sum;` `}` ` ` `// Driver code` `int` `main()` `{` ` ` `int` `n = 1884;` ` ` ` ` `cout << minSum(n);` ` ` ` ` `return` `0;` `}` |

## Java

`// Java implementation of the approach` ` ` `class` `GFG` `{` ` ` `// Function to return the minimum` `// possible sum of digits of A` `// and B such that A + B = n` `static` `int` `minSum(` `int` `n)` `{` ` ` `// Find the sum of digits of n` ` ` `int` `sum = ` `0` `;` ` ` `while` `(n > ` `0` `)` ` ` `{` ` ` `sum += (n % ` `10` `);` ` ` `n /= ` `10` `;` ` ` `}` ` ` ` ` `// If num is a power of 10` ` ` `if` `(sum == ` `1` `)` ` ` `return` `10` `;` ` ` ` ` `return` `sum;` `}` ` ` `// Driver code` `public` `static` `void` `main(String[] args)` `{` ` ` `int` `n = ` `1884` `;` ` ` ` ` `System.out.print(minSum(n));` ` ` `}` `}` ` ` `// This code is contributed by 29AjayKumar` |

## Python3

`# Python implementation of the approach ` ` ` `# Function to return the minimum ` `# possible sum of digits of A ` `# and B such that A + B = n ` `def` `minSum(n) : ` ` ` ` ` `# Find the sum of digits of n ` ` ` `sum` `=` `0` `; ` ` ` `while` `(n > ` `0` `) :` ` ` `sum` `+` `=` `(n ` `%` `10` `); ` ` ` `n ` `/` `/` `=` `10` `; ` ` ` ` ` `# If num is a power of 10 ` ` ` `if` `(` `sum` `=` `=` `1` `) :` ` ` `return` `10` `; ` ` ` ` ` `return` `sum` `; ` ` ` `# Driver code ` `if` `__name__ ` `=` `=` `"__main__"` `: ` ` ` `n ` `=` `1884` `; ` ` ` ` ` `print` `(minSum(n)); ` ` ` `# This code is contributed by AnkitRai01` |

## C#

`// C# implementation of the approach` `using` `System;` ` ` `class` `GFG` `{` ` ` `// Function to return the minimum` `// possible sum of digits of A` `// and B such that A + B = n` `static` `int` `minSum(` `int` `n)` `{` ` ` `// Find the sum of digits of n` ` ` `int` `sum = 0;` ` ` `while` `(n > 0)` ` ` `{` ` ` `sum += (n % 10);` ` ` `n /= 10;` ` ` `}` ` ` ` ` `// If num is a power of 10` ` ` `if` `(sum == 1)` ` ` `return` `10;` ` ` ` ` `return` `sum;` `}` ` ` `// Driver code` `public` `static` `void` `Main(String[] args)` `{` ` ` `int` `n = 1884;` ` ` ` ` `Console.Write(minSum(n));` `}` `}` ` ` `// This code is contributed by PrinciRaj1992` |

**Output:**

21

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the **Essential Maths for CP Course** at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more, please refer **Complete Interview Preparation Course****.**