Addition of two numbers without propagating Carry - GeeksforGeeks

25 Mar, 2021
Given 2 numbers a and b of same length. The task is to calculate their sum in such a way that when adding two corresponding positions the carry has to be kept with them only instead of propagating to the left.See the below image for reference:  
Examples:  
Input: a = 7752 , b = 8834
Output: 151586

Input: a = 123 , b = 456
Output: 579
 
Approach: First of all, reverse both of the numbers a and b. Now, to generate the resulting sum:  
Extract digits from both a and b.
Calculate sum of digits.
If sum of digits is a single digit number, append it directly to the resultant sum.
Otherwise, reverse the current calculated digit sum and extract digits from it one by one and append to the resultant sum.
Below is the implementation of the above approach: 
C++
Java
Python3
C#
PHP
Javascript
// C++ implementation of the above approach#include<bits/stdc++.h>using namespace std; // Function to print sum of 2 numbers// without propagating carryint printSum(int a, int b){    int res = 0;         int temp1 = 0, temp2 = 0;         // Reverse a    while(a)    {       temp1 = temp1*10 + (a%10);       a /= 10;    }    a = temp1;         // Reverse b    while(b)    {       temp2 = temp2*10 + (b%10);       b /= 10;    }    b = temp2;         // Generate sum    // Since length of both a and b are same,    // take any one of them.    while(a)    {          // Extract digits from a and b and add        int sum = (a%10 + b%10);                 // If sum is single digit        if(sum/10 == 0)               res = res*10 + sum;        else        {            // If sum is not single digit            // reverse sum            temp1 = 0;            while(sum)            {                temp1 = temp1*10 + (sum%10);                sum /= 10;            }            sum = temp1;                         // Extract digits from sum and append            // to result            while(sum)            {                res = res*10 + (sum%10);                sum /=10;            }        }                 a/=10;        b/=10;    }         return res;} // Driver codeint main(){    int a = 7752, b = 8834;    cout<<printSum(a, b);         return 0;}
// Java implementation of the approachclass GFG{     // Function to print sum of 2 numbers    // without propagating carry    static int printSum(int a, int b)    {        int res = 0;         int temp1 = 0, temp2 = 0;         // Reverse a        while (a != 0)        {            temp1 = temp1 * 10 + (a % 10);            a /= 10;        }        a = temp1;         // Reverse b        while (b != 0)        {            temp2 = temp2 * 10 + (b % 10);            b /= 10;        }        b = temp2;         // Generate sum        // Since length of both a and b are same,        // take any one of them.        while (a != 0)        {            // Extract digits from a and b and add            int sum = (a % 10 + b % 10);             // If sum is single digit            if (sum / 10 == 0)            {                res = res * 10 + sum;            }            else            {                // If sum is not single digit                // reverse sum                temp1 = 0;                while (sum != 0)                {                    temp1 = temp1 * 10 + (sum % 10);                    sum /= 10;                }                sum = temp1;                 // Extract digits from sum and append                // to result                while (sum != 0)                {                    res = res * 10 + (sum % 10);                    sum /= 10;                }            }             a /= 10;            b /= 10;        }         return res;    }     // Driver code    public static void main(String[] args)    {         int a = 7752, b = 8834;        System.out.println(printSum(a, b));    }} // This code contributed by Rajput-Ji
# Python3 implementation of the approach # Function to prsum of 2 numbers# without propagating carrydef printSum(a, b):     res, temp1, temp2 = 0, 0, 0         # Reverse a    while a > 0:             temp1 = temp1 * 10 + (a % 10)        a //= 10         a = temp1         # Reverse b    while b > 0:             temp2 = temp2 * 10 + (b % 10)        b //= 10         b = temp2         # Generate sum    # Since length of both a and b are same,    # take any one of them.    while a:                 # Extract digits from a and b and add        Sum = a % 10 + b % 10                 # If sum is single digit        if Sum // 10 == 0:            res = res * 10 + Sum                 else:                     # If sum is not single digit            # reverse sum            temp1 = 0            while Sum > 0:                             temp1 = temp1 * 10 + (Sum % 10)                Sum //= 10                         Sum = temp1                         # Extract digits from sum and            # append to result            while Sum > 0:                             res = res * 10 + (Sum % 10)                Sum //= 10                 a //= 10        b //= 10         return res # Driver codeif __name__ == "__main__":     a, b = 7752, 8834    print(printSum(a, b))     # This code is contributed# by Rituraj Jain
// C# implementation of the above approachusing System; class GFG{ // Function to print sum of 2 numbers// without propagating carrystatic int printSum(int a, int b){    int res = 0;         int temp1 = 0, temp2 = 0;         // Reverse a    while(a != 0)    {        temp1 = temp1 * 10 + (a % 10);        a /= 10;    }    a = temp1;         // Reverse b    while(b != 0)    {        temp2 = temp2 * 10 + (b % 10);        b /= 10;    }    b = temp2;         // Generate sum    // Since length of both a and b are same,    // take any one of them.    while(a != 0)    {        // Extract digits from a and b and add        int sum = (a % 10 + b % 10);                 // If sum is single digit        if(sum / 10 == 0)            res = res * 10 + sum;        else        {            // If sum is not single digit            // reverse sum            temp1 = 0;            while(sum != 0)            {                temp1 = temp1 * 10 + (sum % 10);                sum /= 10;            }            sum = temp1;                         // Extract digits from sum and append            // to result            while(sum != 0)            {                res = res * 10 + (sum % 10);                sum /=10;            }        }                 a /= 10;        b /= 10;    }         return res;} // Driver codepublic static void Main(){    int a = 7752, b = 8834;    Console.Write(printSum(a, b));     }} // This code is contributed// by Akanksha Rai
<?php// PHP implementation of the approach // Function to print sum of 2 numbers// without propagating carryfunction printSum($a, $b){    $res = 0;     $temp1 = 0; $temp2 = 0;     // Reverse a    while ($a != 0)    {        $temp1 = $temp1 * 10 + ($a % 10);        $a = (int)($a / 10);    }    $a = $temp1;     // Reverse b    while ($b != 0)    {        $temp2 = $temp2 * 10 + ($b % 10);        $b = (int)($b / 10);    }         $b = $temp2;     // Generate sum    // Since length of both a and b are same,    // take any one of them.    while ($a != 0)    {        // Extract digits from a and b and add        $sum = ($a % 10 + $b % 10);         // If sum is single digit        if ((int)($sum / 10) == 0)        {            $res = $res * 10 + $sum;        }        else        {                         // If sum is not single digit            // reverse sum            $temp1 = 0;            while ($sum != 0)            {                $temp1 = $temp1 * 10 + ($sum % 10);                $sum = (int)($sum / 10);            }            $sum = $temp1;             // Extract digits from sum and append            // to result            while ($sum != 0)            {                $res = $res * 10 + ($sum % 10);                $sum = (int)($sum / 10);            }        }         $a = (int)($a / 10);        $b = (int)($b / 10);    }     return $res;} // Driver code$a = 7752; $b = 8834;echo(printSum($a, $b)); // This code contributed by Code_Mech.?>
  <script>    // Javascript implementation of the above approach     // Function to print sum of 2 numbers    // without propagating carry    function printSum(a, b)    {      var res = 0;      var temp1 = 0, temp2 = 0;       // Reverse a      while (a) {        temp1 = temp1 * 10 + (a % 10);        a = parseInt(a / 10);      }      a = temp1;       // Reverse b      while (b) {        temp2 = temp2 * 10 + (b % 10);        b = parseInt(b / 10);      }      b = temp2;       // Generate sum      // Since length of both a and b are same,      // take any one of them.      while (a)      {               // Extract digits from a and b and add        var sum = (a % 10 + b % 10);         // If sum is single digit        if (parseInt(sum / 10) == 0)          res = res * 10 + sum;        else        {                   // If sum is not single digit          // reverse sum          temp1 = 0;          while (sum) {            temp1 = temp1 * 10 + (sum % 10);            sum = parseInt(sum / 10);          }          sum = temp1;           // Extract digits from sum and append          // to result          while (sum) {            res = res * 10 + (sum % 10);            sum = parseInt(sum / 10);          }        }         a = parseInt(a / 10);        b = parseInt(b / 10);      }       return res;    }     // Driver code    var a = 7752, b = 8834;    document.write(printSum(a, b)); // This code is contributed by rrrtnx.  </script>
151586
 
Time Complexity: O(N). 
rituraj_jain
Akanksha_Rai
Rajput-Ji
Code_Mech
rrrtnx
number-theory
Mathematical
number-theory
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Program to print prime numbers from 1 to N.
Modular multiplicative inverse
Fizz Buzz Implementation
Generate all permutation of a set in Python
Check if a number is Palindrome
Program to multiply two matrices
Segment Tree | Set 1 (Sum of given range)
How to check if a given point lies inside or outside a polygon?
Merge two sorted arrays with O(1) extra space
Count ways to reach the n'th stair