Sum of two numbers where one number is represented as array of digits
Given an array arr[] of digits and an integer K, the task is to find num(arr) + K where num(arr) is the number formed by concatenating all the digits of the array.
Examples:
Input: arr[] = {2, 7, 4}, K = 181
Output: 455
274 + 181 = 455
Input: arr[] = {6}, K = 815
Output: 821
6 + 815 = 821
Approach: Start traversing the digits array from the end and start adding the digits of K one by one to the current digit, if any carry is generated then add it to the next addition of digits. After all the digits of K have been added, start traversing the digits array from the left and start printing the elements which on concatenation will give the resultant number.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
vector< int > addToArrayForm(vector< int >& A, int K)
{
vector< int > v, ans;
int rem = 0;
int i = 0;
for (i = A.size() - 1; i >= 0; i--) {
int my = A[i] + K % 10 + rem;
if (my > 9) {
rem = 1;
v.push_back(my % 10);
}
else {
v.push_back(my);
rem = 0;
}
K = K / 10;
}
while (K > 0) {
int my = K % 10 + rem;
v.push_back(my % 10);
if (my / 10 > 0)
rem = 1;
else
rem = 0;
K = K / 10;
}
if (rem > 0)
v.push_back(rem);
for ( int i = v.size() - 1; i >= 0; i--)
ans.push_back(v[i]);
return ans;
}
int main()
{
vector< int > A{ 2, 7, 4 };
int K = 181;
vector< int > ans = addToArrayForm(A, K);
for ( int i = 0; i < ans.size(); i++)
cout << ans[i];
return 0;
}
|
Java
import java.util.*;
class GFG
{
static ArrayList<Integer> addToArrayForm(ArrayList<Integer> A, int K)
{
ArrayList<Integer> v = new ArrayList<Integer>();
ArrayList<Integer> ans = new ArrayList<Integer>();
int rem = 0 ;
int i = 0 ;
for (i = A.size() - 1 ; i >= 0 ; i--)
{
int my = A.get(i) + K % 10 + rem;
if (my > 9 )
{
rem = 1 ;
v.add(my % 10 );
}
else
{
v.add(my);
rem = 0 ;
}
K = K / 10 ;
}
while (K > 0 )
{
int my = K % 10 + rem;
v.add(my % 10 );
if (my / 10 > 0 )
rem = 1 ;
else
rem = 0 ;
K = K / 10 ;
}
if (rem > 0 )
v.add(rem);
for ( int j = v.size() - 1 ; j >= 0 ; j--)
ans.add(v.get(j));
return ans;
}
public static void main (String[] args)
{
ArrayList<Integer> A = new ArrayList<Integer>();
A.add( 2 );
A.add( 7 );
A.add( 4 );
int K = 181 ;
ArrayList<Integer> ans = addToArrayForm(A, K);
for ( int i = 0 ; i < ans.size(); i++)
System.out.print(ans.get(i));
}
}
|
Python3
def addToArrayForm(A, K):
v, ans = [], []
rem, i = 0 , 0
for i in range ( len (A) - 1 , - 1 , - 1 ):
my = A[i] + (K % 10 ) + rem
if my > 9 :
rem = 1
v.append(my % 10 )
else :
v.append(my)
rem = 0
K = K / / 10
while K > 0 :
my = (K % 10 ) + rem
v.append(my % 10 )
if my / / 10 > 0 :
rem = 1
else :
rem = 0
K = K / / 10
if rem > 0 :
v.append(rem)
for i in range ( len (v) - 1 , - 1 , - 1 ):
ans.append(v[i])
return ans
if __name__ = = "__main__" :
A = [ 2 , 7 , 4 ]
K = 181
ans = addToArrayForm(A, K)
for i in range ( 0 , len (ans)):
print (ans[i], end = "")
|
C#
using System;
using System.Collections;
class GFG
{
static ArrayList addToArrayForm(ArrayList A, int K)
{
ArrayList v = new ArrayList();
ArrayList ans = new ArrayList();
int rem = 0;
int i = 0;
for (i = A.Count - 1; i >= 0; i--)
{
int my = ( int )A[i] + K % 10 + rem;
if (my > 9)
{
rem = 1;
v.Add(my % 10);
}
else
{
v.Add(my);
rem = 0;
}
K = K / 10;
}
while (K > 0)
{
int my = K % 10 + rem;
v.Add(my % 10);
if (my / 10 > 0)
rem = 1;
else
rem = 0;
K = K / 10;
}
if (rem > 0)
v.Add(rem);
for ( int j = v.Count - 1; j >= 0; j--)
ans.Add(( int )v[j]);
return ans;
}
static void Main()
{
ArrayList A = new ArrayList();
A.Add(2);
A.Add(7);
A.Add(4);
int K = 181;
ArrayList ans = addToArrayForm(A, K);
for ( int i = 0; i < ans.Count; i++)
Console.Write(( int )ans[i]);
}
}
|
PHP
<?php
function addToArrayForm( $A , $K )
{
$v = array ();
$ans = array ();
$rem = 0;
$i = 0;
for ( $i = count ( $A ) - 1; $i >= 0; $i --)
{
$my = $A [ $i ] + $K % 10 + $rem ;
if ( $my > 9)
{
$rem = 1;
array_push ( $v , $my % 10);
}
else
{
array_push ( $v , $my );
$rem = 0;
}
$K = floor ( $K / 10);
}
while ( $K > 0)
{
$my = $K % 10 + $rem ;
array_push ( $v , $my % 10);
if ( $my / 10 > 0)
$rem = 1;
else
$rem = 0;
$K = floor ( $K / 10);
}
if ( $rem > 0)
array_push ( $v , $rem );
for ( $i = count ( $v ) - 1; $i >= 0; $i --)
array_push ( $ans , $v [ $i ]);
return $ans ;
}
$A = array ( 2, 7, 4 );
$K = 181;
$ans = addToArrayForm( $A , $K );
for ( $i = 0; $i < count ( $ans ); $i ++)
echo $ans [ $i ];
?>
|
Javascript
<script>
function addToArrayForm(A, K)
{
let v = [];
let ans = [];
let rem = 0;
let i = 0;
for (i = A.length - 1; i >= 0; i--)
{
let my = A[i] + K % 10 + rem;
if (my > 9)
{
rem = 1;
v.push(my % 10);
}
else
{
v.push(my);
rem = 0;
}
K = parseInt(K / 10, 10);
}
while (K > 0)
{
let my = K % 10 + rem;
v.push(my % 10);
if (parseInt(my / 10, 10) > 0)
rem = 1;
else
rem = 0;
K = parseInt(K / 10, 10);
}
if (rem > 0)
v.push(rem);
for (let j = v.length - 1; j >= 0; j--)
ans.push(v[j]);
return ans;
}
let A = [];
A.push(2);
A.push(7);
A.push(4);
let K = 181;
let ans = addToArrayForm(A, K);
for (let i = 0; i < ans.length; i++)
document.write(ans[i]);
</script>
|
Time Complexity: O(n + log K)
Auxiliary Space: O(n + log K)
Last Updated :
29 Dec, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...