Since C doesn't support Big Integers as JAVA, I am trying to implement a integer adder function which takes two integer arrays as parameter and returns a pointer to their sum which is again an array. Here is my code.
#include<stdio.h>
#include<stdlib.h>
int max(int a,int b) {
return a < b ? b : a;
}
int* decimalAdder (int* p, int* q) {
int size1, size2, i;
size1 = sizeof(p) / sizeof(int);
size2 = sizeof(q) / sizeof(int);
int m = max(size1, size2) + 1;
int* c = (int*)malloc(m * sizeof(int));
int carry = 0;
for(i=0 ; i<m ; i++) {
c[i] = 0;
if(i < size1 && i < size2) {
c[i] += p[i] + q[i] + carry;
if(c[i] >= 10) {
c[i] = c[i] % 10;
carry = 1;
}
else
carry = 0;
}
else if(i < size1) {
c[i] += p[i] + carry;
if(c[i] >= 10) {
c[i] = c[i] % 10;
carry = 1;
}
else
carry = 0;
}
else if(i < size2) {
c[i] += q[i] + carry;
if(c[i] >= 10) {
c[i] = c[i] % 10;
carry = 1;
}
else
carry = 0;
}
else
c[i] += carry;
}
return c;
}
//Test program
int main() {
int a[] = {7, 5, 3, 6};
int b[] = {3, 5, 3};
int* sum;
int i;
sum = decimalAdder(a, b);
int size = sizeof(sum) / sizeof(int);
for(i = size ; i >= 0 ; i--)
printf("%d", sum[i]);
free(sum);
sum=NULL;
return 0;
}
It Outputs 10 Where I'm going wrong? What am I missing?