Given a big positive number **N**. The task is divide N into two number **‘A’** and **‘B’** such that difference between them is **K** (1 <= K <= 10^{100}) i.e A – B = K.

**Examples:**

Input : N = 10, K = 2 Output : A = 6 B = 4 Input : N = 20, K = 4 Output : A = 12 B = 8

Let the two required number be ‘A’ and ‘B’. So, we know sum of ‘A’ and ‘B’ will end upto N.

So, one equation became,

A + B = N

And also, we want the difference between ‘A’ and ‘B’ equals to ‘K’.

So, another equation becomes,

A – B = K

On adding both the equation, we get

2*A = N + K

So, A = (N + K)/2

Then we can find B by,** B = (N – A)**

Now, to handle the Big Integer, we have store Integers in character array and define a function to perform the operation on them.

Below is C implementation of this approach:

`// C program to Divide a Big` `// Number into two parts` `#include <stdio.h>` `#include <string.h>` `#define MAX 100` ` ` `// Function to adds two Numbers` `// represnted as array of character.` `void` `add(` `char` `v1[], ` `char` `v2[])` `{` ` ` `int` `i, d, c = 0;` ` ` ` ` `// length of string` ` ` `int` `l1 = ` `strlen` `(v1);` ` ` `int` `l2 = ` `strlen` `(v2);` ` ` ` ` `// initializing extra character` ` ` `// position to 0` ` ` `for` `(i = l1; i < l2; i++)` ` ` `v1[i] = ` `'0'` `;` ` ` ` ` `for` `(i = l2; i < l1; i++)` ` ` `v2[i] = ` `'0'` `;` ` ` ` ` `// Adding each element of character` ` ` `// and storing the carry.` ` ` `for` `(i = 0; i < l1 || i < l2; i++) {` ` ` `d = (v1[i] - ` `'0'` `) + (v2[i] - ` `'0'` `) + c;` ` ` `c = d / 10;` ` ` `d %= 10;` ` ` `v1[i] = ` `'0'` `+ d;` ` ` `}` ` ` ` ` `// If remainder remains.` ` ` `while` `(c) {` ` ` `v1[i] = ` `'0'` `+ (c % 10);` ` ` `c /= 10;` ` ` `i++;` ` ` `}` ` ` ` ` `v1[i] = ` `'\0'` `;` ` ` `v2[l2] = ` `'\0'` `;` `}` ` ` `// Function to subtracts two numbers` `// represnted by string.` `void` `subs(` `char` `v1[], ` `char` `v2[])` `{` ` ` `int` `i, d, c = 0;` ` ` ` ` `// Finding the length of the string.` ` ` `int` `l1 = ` `strlen` `(v1);` ` ` `int` `l2 = ` `strlen` `(v2);` ` ` ` ` `// initializing extra character position to 0.` ` ` `for` `(i = l2; i < l1; i++)` ` ` `v2[i] = ` `'0'` `;` ` ` ` ` `// Substrating each element of character.` ` ` `for` `(i = 0; i < l1; i++) {` ` ` `d = (v1[i] - ` `'0'` `- c) - (v2[i] - ` `'0'` `);` ` ` ` ` `if` `(d < 0) {` ` ` `d += 10;` ` ` `c = 1;` ` ` `}` ` ` `else` ` ` `c = 0;` ` ` ` ` `v1[i] = ` `'0'` `+ d;` ` ` `}` ` ` ` ` `v2[l2] = ` `'\0'` `;` ` ` `i = l1 - 1;` ` ` ` ` `while` `(i > 0 && v1[i] == ` `'0'` `)` ` ` `i--;` ` ` ` ` `v1[i + 1] = ` `'\0'` `;` `}` ` ` `// Function divides a number represented by` `// character array a constant.` `int` `divi(` `char` `v[], ` `int` `q)` `{` ` ` `int` `i, l = ` `strlen` `(v);` ` ` ` ` `int` `c = 0, d;` ` ` ` ` `// Dividing each character element by constant.` ` ` `for` `(i = l - 1; i >= 0; i--) {` ` ` `d = c * 10 + (v[i] - ` `'0'` `);` ` ` `c = d % q;` ` ` `d /= q;` ` ` `v[i] = ` `'0'` `+ d;` ` ` `}` ` ` ` ` `i = l - 1;` ` ` ` ` `while` `(i > 0 && v[i] == ` `'0'` `)` ` ` `i--;` ` ` ` ` `v[i + 1] = ` `'\0'` `;` ` ` `return` `c;` `}` ` ` `// Function to reverses the character array.` `void` `rev(` `char` `v[])` `{` ` ` `int` `l = ` `strlen` `(v);` ` ` `int` `i;` ` ` `char` `cc;` ` ` ` ` `// Reversing the array.` ` ` `for` `(i = 0; i < l - 1 - i; i++) {` ` ` `cc = v[i];` ` ` `v[i] = v[l - 1 - i];` ` ` `v[l - i - 1] = cc;` ` ` `}` `}` ` ` `// Wrapper Function` `void` `divideWithDiffK(` `char` `a[], ` `char` `k[])` `{` ` ` ` ` `// Reversing the character array.` ` ` `rev(a);` ` ` `rev(k);` ` ` ` ` `// Adding the each element of both array` ` ` `// and storing the sum in array a[].` ` ` `add(a, k);` ` ` ` ` `// Dividing the array a[] by 2.` ` ` `divi(a, 2);` ` ` ` ` `// Reversing the character array to get output.` ` ` `rev(a);` ` ` `printf` `(` `"%s "` `, a);` ` ` ` ` `// Substracting each element of array` ` ` `// i.e calculating a = a - b` ` ` `rev(a);` ` ` `subs(a, k);` ` ` ` ` `// Reversing the character array to get output.` ` ` `rev(a);` ` ` `printf` `(` `"%s"` `, a);` `}` ` ` `// Driven Program` `int` `main()` `{` ` ` `char` `a[MAX] = ` `"100"` `, k[MAX] = ` `"20"` `;` ` ` `divideWithDiffK(a, k);` ` ` `return` `0;` `}` |

**Output:**

60 40

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****.**