# Divide a number into two parts such that sum of digits is maximum

Given a number N. The task is to find the maximum possible value of SumOfDigits(A) + SumOfDigits(B) such that A + B = n (0<=A, B<=n).

Examples:

```Input: N = 35
Output: 17
35 = 9 + 26
SumOfDigits(26) = 8, SumOfDigits(9) = 9

Input: N = 7
Output: 7
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: The idea is to divide the number into two parts A and B such that A is in terms of 9 i.e. closest number to N and B = N-A. For example, N = 35, Smallest Number that is closest to 35 is 29.

## C++

 `// C++ implementation of above approach ` `#include ` `using` `namespace` `std; ` ` `  `// Returns sum of digits of x ` `int` `sumOfDigitsSingle(``int` `x) ` `{ ` `    ``int` `ans = 0; ` `    ``while` `(x) { ` `        ``ans += x % 10; ` `        ``x /= 10; ` `    ``} ` `    ``return` `ans; ` `} ` ` `  `// Returns closest number to x in terms of 9's. ` `int` `closest(``int` `x) ` `{ ` `    ``int` `ans = 0; ` `    ``while` `(ans * 10 + 9 <= x) ` `        ``ans = ans * 10 + 9; ` ` `  `    ``return` `ans; ` `} ` ` `  `int` `sumOfDigitsTwoParts(``int` `N) ` `{ ` `    ``int` `A = closest(N); ` `    ``return` `sumOfDigitsSingle(A) + sumOfDigitsSingle(N - A); ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `N = 35; ` `    ``cout << sumOfDigitsTwoParts(N); ` `    ``return` `0; ` `} `

## Java

 `// Java implementation of above approach ` `// Returns sum of digits of x ` `import` `java.util.*; ` `import` `java.lang.*; ` `import` `java.io.*; ` ` `  `class` `GFG ` `{ ` `static` `int` `sumOfDigitsSingle(``int` `x) ` `{ ` `    ``int` `ans = ``0``; ` `    ``while` `(x != ``0``) ` `    ``{ ` `        ``ans += x % ``10``; ` `        ``x /= ``10``; ` `    ``} ` `    ``return` `ans; ` `} ` ` `  `// Returns closest number to x  ` `// in terms of 9's. ` `static` `int` `closest(``int` `x) ` `{ ` `    ``int` `ans = ``0``; ` `    ``while` `(ans * ``10` `+ ``9` `<= x) ` `        ``ans = ans * ``10` `+ ``9``; ` ` `  `    ``return` `ans; ` `} ` ` `  `static` `int` `sumOfDigitsTwoParts(``int` `N) ` `{ ` `    ``int` `A = closest(N); ` `    ``return` `sumOfDigitsSingle(A) +  ` `           ``sumOfDigitsSingle(N - A); ` `} ` ` `  `// Driver code ` `public` `static` `void` `main(String args[]) ` `{ ` `    ``int` `N = ``35``; ` `    ``System.out.print(sumOfDigitsTwoParts(N)); ` `} ` `} ` ` `  `// This code is contributed by ` `// Subhadeep Gupta `

## Python 3

 `# Python 3 implementation of above approach  ` ` `  `#  Returns sum of digits of x  ` `def` `sumOfDigitsSingle(x) : ` `    ``ans ``=` `0` `    ``while` `x : ` `        ``ans ``+``=` `x ``%` `10` `        ``x ``/``/``=` `10` ` `  `    ``return` `ans ` ` `  `# Returns closest number to x in terms of 9's ` `def` `closest(x) : ` `    ``ans ``=` `0` `    ``while` `(ans ``*` `10` `+` `9` `<``=` `x) : ` `        ``ans ``=` `ans ``*` `10` `+` `9` ` `  `    ``return` `ans ` ` `  `def` `sumOfDigitsTwoParts(N) : ` `    ``A ``=` `closest(N) ` ` `  `    ``return` `sumOfDigitsSingle(A) ``+` `sumOfDigitsSingle(N ``-` `A) ` ` `  ` `  `# Driver Code ` `if` `__name__ ``=``=` `"__main__"` `: ` ` `  `    ``N ``=` `35` `    ``print``(sumOfDigitsTwoParts(N)) ` ` `  `# This code is contributed by ANKITRAI1 `

## C#

 `// C# implementation of above approach ` `// Returns sum of digits of x ` ` `  `using` `System;  ` `class` `GFG ` `{ ` `static` `int` `sumOfDigitsSingle(``int` `x) ` `{ ` `    ``int` `ans = 0; ` `    ``while` `(x != 0) ` `    ``{ ` `        ``ans += x % 10; ` `        ``x /= 10; ` `    ``} ` `    ``return` `ans; ` `} ` `  `  `// Returns closest number to x  ` `// in terms of 9's. ` `static` `int` `closest(``int` `x) ` `{ ` `    ``int` `ans = 0; ` `    ``while` `(ans * 10 + 9 <= x) ` `        ``ans = ans * 10 + 9; ` `  `  `    ``return` `ans; ` `} ` `  `  `static` `int` `sumOfDigitsTwoParts(``int` `N) ` `{ ` `    ``int` `A = closest(N); ` `    ``return` `sumOfDigitsSingle(A) +  ` `           ``sumOfDigitsSingle(N - A); ` `} ` `  `  `// Driver code ` `public` `static` `void` `Main() ` `{ ` `    ``int` `N = 35; ` `    ``Console.Write(sumOfDigitsTwoParts(N)); ` `} ` `} ` ` `

## PHP

 ` `

Output:

```17
```

GeeksforGeeks has prepared a complete interview preparation course with premium videos, theory, practice problems, TA support and many more features. Please refer Placement 100 for details

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.