Program to add two integers of given base
Given three integers X, Y, and B, where X and Y are Base-B integers. The task is to find the sum of integers X and Y.
Examples:
Input: X = 123, Y = 234, B = 6
Output: 401
Explanation:
Sum of two integers in base 6 -
1 1
1 2 3
+ 2 3 4
-------------
4 0 1
Input: X = 546, Y = 248 B = 9
Output: 805
Explanation:
Sum of two integers in base 9 -
1 1
5 4 6
+ 2 4 8
-------------
8 0 5
Approach: The idea is to use the fact that whenever two digits of the numbers are added, then the place value will be the modulo of the sum of digits by the base whereas carry will be the integer division of the sum of digits by base. i.e.
Let two digits of the number be D1 and D2 -
Place Value = (D1 + D2) % B
Carry = (D1 + D2) / B
Similarly, Add every digit from the last to get the desired result.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
string sumBaseB(string a,
string b, int base)
{
int len_a, len_b;
len_a = a.size();
len_b = b.size();
string sum, s;
s = "" ;
sum = "" ;
int diff;
diff = abs (len_a - len_b);
for ( int i = 1; i <= diff; i++)
s += "0" ;
if (len_a < len_b)
a = s + a;
else
b = s + b;
int curr, carry = 0;
for ( int i = max(len_a, len_b) - 1;
i > -1; i--) {
curr = carry + (a[i] - '0' ) +
(b[i] - '0' );
carry = curr / base;
curr = curr % base;
sum = ( char )(curr + '0' ) + sum;
}
if (carry > 0)
sum = ( char )(carry + '0' ) + sum;
return sum;
}
int main()
{
string a, b, sum;
int base;
a = "123" ;
b = "234" ;
base = 6;
sum = sumBaseB(a, b, base);
cout << sum << endl;
return 0;
}
|
Java
class GFG {
static String sumBaseB(String a, String b, int base)
{
int len_a, len_b;
len_a = a.length();
len_b = b.length();
String sum, s;
s = "" ;
sum = "" ;
int diff;
diff = Math.abs(len_a - len_b);
for ( int i = 1 ; i <= diff; i++)
s += "0" ;
if (len_a < len_b)
a = s + a;
else
b = s + b;
int curr, carry = 0 ;
for ( int i = Math.max(len_a, len_b) - 1 ;
i > - 1 ; i--) {
curr = carry + (a.charAt(i) - '0' ) +
(b.charAt(i) - '0' );
carry = curr / base;
curr = curr % base;
sum = ( char )(curr + '0' ) + sum;
}
if (carry > 0 )
sum = ( char )(carry + '0' ) + sum;
return sum;
}
public static void main (String[] args)
{
String a, b, sum;
int base;
a = "123" ;
b = "234" ;
base = 6 ;
sum = sumBaseB(a, b, base);
System.out.println(sum);
}
}
|
Python3
def sumBaseB(a,b,base):
len_a = len (a)
len_b = len (b)
s = "";
sum = "";
diff = abs (len_a - len_b);
for i in range ( 1 ,diff + 1 ):
s + = "0"
if (len_a < len_b):
a = s + a
else :
b = s + b;
carry = 0 ;
for i in range ( max (len_a, len_b) - 1 , - 1 , - 1 ):
curr = carry + ( ord (a[i]) - ord ( '0' )) + ( ord (b[i]) - ord ( '0' ));
carry = curr / / base
curr = curr % base;
sum = chr (curr + ord ( '0' )) + sum
if (carry > 0 ):
sum = chr (carry + ord ( '0' )) + sum ;
return sum
a = "123"
b = "234"
base = 6
sum = sumBaseB(a, b, base);
print ( sum )
|
C#
using System;
class GFG {
static string sumBaseB( string a, string b, int base_var)
{
int len_a, len_b;
len_a = a.Length;
len_b = b.Length;
string sum, s;
s = "" ;
sum = "" ;
int diff;
diff = Math.Abs(len_a - len_b);
for ( int i = 1; i <= diff; i++)
s += "0" ;
if (len_a < len_b)
a = s + a;
else
b = s + b;
int curr, carry = 0;
for ( int i = Math.Max(len_a, len_b) - 1;
i > -1; i--) {
curr = carry + (a[i] - '0' ) +
(b[i] - '0' );
carry = curr / base_var;
curr = curr % base_var;
sum = ( char )(curr + '0' ) + sum;
}
if (carry > 0)
sum = ( char )(carry + '0' ) + sum;
return sum;
}
public static void Main ( string [] args)
{
string a, b, sum;
int base_var;
a = "123" ;
b = "234" ;
base_var = 6;
sum = sumBaseB(a, b, base_var);
Console.WriteLine(sum);
}
}
|
Javascript
<script>
function sumBaseB(a, b, base_var)
{
let len_a, len_b;
len_a = a.length;
len_b = b.length;
let sum, s;
s = "" ;
sum = "" ;
let diff;
diff = Math.abs(len_a - len_b);
for (let i = 1; i <= diff; i++)
s += "0" ;
if (len_a < len_b)
a = s + a;
else
b = s + b;
let curr, carry = 0;
for (let i = Math.max(len_a, len_b) - 1;
i > -1; i--)
{
curr = carry + (a[i].charCodeAt() -
'0' .charCodeAt()) +
(b[i].charCodeAt() -
'0' .charCodeAt());
carry = parseInt(curr / base_var, 10);
curr = curr % base_var;
sum = String.fromCharCode(
curr + '0' .charCodeAt()) + sum;
}
if (carry > 0)
sum = String.fromCharCode(
carry + '0' .charCodeAt()) + sum;
return sum;
}
let a, b, sum;
let base_var;
a = "123" ;
b = "234" ;
base_var = 6;
sum = sumBaseB(a, b, base_var);
document.write(sum + "</br>" );
</script>
|
PHP
<?php
function sumBaseB( $a , $b , $base )
{
$len_a = strlen ( $a );
$len_b = strlen ( $b );
$s = "" ;
$sum = "" ;
$diff = abs ( $len_a - $len_b );
for ( $i = 1; $i <= $diff ; $i ++)
$s .= "0" ;
if ( $len_a < $len_b )
$a = $s . $a ;
else
$b = $s . $b ;
$carry = 0;
for ( $i = max( $len_a , $len_b ) - 1; $i > -1; $i --) {
$curr = $carry + (ord( $a [ $i ]) - ord( '0' )) +(ord( $b [ $i ]) - ord( '0' ));
$carry = intdiv( $curr , $base );
$curr = $curr % $base ;
$sum = chr ( $curr + ord( '0' )) . $sum ;
}
if ( $carry > 0)
$sum = chr ( $carry + ord( '0' )) . $sum ;
return $sum ;
}
$a = "123" ;
$b = "234" ;
$base = 6;
$sum = sumBaseB( $a , $b , $base );
echo $sum ;
return 0;
?>
|
Time Complexity: O(max(len_a , len_b))
Auxiliary Space: O(max(len_a , len_b))
Last Updated :
03 Oct, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...