Write a program which can do sum of large numbers having up to 1000 digits
Solution by Arjun Suresh
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
void print(char *a, int l);
int read(char *a);
int sum(char *a, char* b, char * c, int al, int bl); 
int main(void) {
	char a[1000], b[1000], c[1000]; //a and b hold the input numbers and c hold the output number. Each array entry is a digit 
	int al, bl; //for storing the number of digits of the two input numbers
	printf("Enter the first number ");
	al = read(a);
	printf("Enter the second number ");
	bl = read(b);
	int l = sum(a, b, c, al, bl);
	printf("sum = ");
	print(c, l);
	return 0;
}
 
int sum(char *a, char* b, char * c, int al, int bl)
{
	int l = al > bl? al:bl;//l stores the no.of digit of output which may become l+1 due to carry from MSB
        int i = l;
        char carry = 0;
        while(al > 0 && bl > 0)
        {
                char val = a[--al]  + b[--bl] + carry;
                c[i--] = val % 10;
                carry =   val / 10;
        }
        while(al > 0)//If a has more digits than b
        {
                char val = a[--al]  + carry;
                c[i--] = val % 10;
                carry =   val / 10;
        }
        while(bl > 0)//If b has more digits than a
        {
                char val =  b[--bl] + carry;
                c[i--] = val % 10;
                carry =   val / 10;
        }
        c[0] = carry;//Assigning the final carry
	return l+1;//Return the no. of digits of output
} 
 
int read(char *a)
{
	char c;
	int i = 0;
	do
	{
		c = getchar();
	}
	while(isspace(c)); //Reading and discarding any whitespace char typed
	while(isdigit(c))
	{
		a[i++] = c - 48; //getchar returns the ASCII. So, for 1 it returns 49. Subtracting 48, we get the actual int value entered via keyboard 
		c = getchar();
	}
	return i;//Return the no. of digits read
}
 
void print(char *a, int l)
{
	int i;
	if(a[0] != 0)
		printf("%d", a[0]);//If final carry is 0, ignore it
	for(i = 1; i < l; i++)
	{
		printf("%d", a[i]);
	}
	printf("\n");
}
 