# Minimize the sum of digits of A and B such that A + B = N

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

## Javascript

`<script>` `// Javascript implementation of the approach` `// Function to return the minimum` `// possible sum of digits of A` `// and B such that A + B = n` `function` `minSum(n)` `{` ` ` `// Find the sum of digits of n` ` ` `var` `sum = 0;` ` ` `while` `(n > 0) {` ` ` `sum += (n % 10);` ` ` `n = parseInt(n/10);` ` ` `}` ` ` `// If num is a power of 10` ` ` `if` `(sum == 1)` ` ` `return` `10;` ` ` `return` `sum;` `}` `// Driver code` `var` `n = 1884;` `document.write( minSum(n));` `// This code is contributed by famously.` `</script>` |

**Output:**

21

Time Complexity: O(log n)

Auxiliary Space: O(1)