(Created page with "Complexity <math>\theta(n)</math> No. of swaps in the worst case = <math> \lfloor n/2 \rfloor</math> <syntaxhighlight lang="c" name="largesum"> #include <stdio.h> #include<s...")
 
Line 1: Line 1:
Complexity <math>\theta(n)</math>
 
  
No. of swaps in the worst case = <math> \lfloor n/2 \rfloor</math>
 
  
 
<syntaxhighlight lang="c" name="largesum">
 
<syntaxhighlight lang="c" name="largesum">
Line 12: Line 10:
  
 
int main(void) {
 
int main(void) {
char a[1000], b[1000], c[1000], carry;
+
char a[1000], b[1000], c[1000], carry; //a and b hold the input numbers and c hold the output number. Each array entry is a digit
int al, bl;
+
int al, bl; //for storing the number of digits of the two input numbers
 
printf("Enter the first number ");
 
printf("Enter the first number ");
 
al = read(a);
 
al = read(a);
fflush(stdin);
+
fflush(stdin); //Removes any previous character entered via keyboard
 
printf("Enter the second number ");
 
printf("Enter the second number ");
 
bl = read(b);
 
bl = read(b);
int l = al > bl? al:bl;
+
int l = al > bl? al:bl;//l stores the no.of digit of output which might also become l+1 because of carry from MSB
 
int i = l;
 
int i = l;
 
carry = 0;
 
carry = 0;
Line 28: Line 26:
 
carry =  val/10;
 
carry =  val/10;
 
}
 
}
while(al > 0)
+
while(al > 0)//If a has more digits than b
 
{
 
{
 
char val = a[--al]  + carry;
 
char val = a[--al]  + carry;
Line 34: Line 32:
 
                 carry =  val/10;
 
                 carry =  val/10;
 
}
 
}
while(bl > 0)
+
while(bl > 0)//If b has more digits than a
 
{
 
{
 
char val =  b[--bl] + carry;
 
char val =  b[--bl] + carry;
Line 40: Line 38:
 
                 carry =  val/10;
 
                 carry =  val/10;
 
}
 
}
c[0] = carry;
+
c[0] = carry;//Assigning the final carry
 
printf("sum = ");
 
printf("sum = ");
 
print(c, l+1);
 
print(c, l+1);
Line 55: Line 53:
 
if(!isdigit(c))
 
if(!isdigit(c))
 
break;
 
break;
a[i++] = c-48;
+
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
 
}
 
}
 
return i;
 
return i;
Line 73: Line 71:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===Explanation===
 
  
  

Revision as of 13:11, 6 May 2014


<syntaxhighlight lang="c" name="largesum">

  1. include <stdio.h>
  2. include<string.h>
  3. include<ctype.h>

void print(char *a, int l); int read(char *a);

int main(void) { char a[1000], b[1000], c[1000], carry; //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); fflush(stdin); //Removes any previous character entered via keyboard printf("Enter the second number "); bl = read(b); int l = al > bl? al:bl;//l stores the no.of digit of output which might also become l+1 because of carry from MSB int i = l; 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 printf("sum = "); print(c, l+1); return 0; }

int read(char *a) { char c; int i = 0; while(1) { c = getchar(); if(!isdigit(c)) break; 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 } return i; } void print(char *a, int l) { int i; if(a[0] != 0) printf("%d",a[0]); for(i = 1; i < l; i++) { printf("%d", a[i]); } printf("\n"); }

</syntaxhighlight>





blog comments powered by Disqus


<syntaxhighlight lang="c" name="largesum">

  1. include <stdio.h>
  2. include<string.h>
  3. include<ctype.h>

void print(char *a, int l); int read(char *a);

int main(void) { char a[1000], b[1000], c[1000], carry; //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); fflush(stdin); //Removes any previous character entered via keyboard printf("Enter the second number "); bl = read(b); int l = al > bl? al:bl;//l stores the no.of digit of output which might also become l+1 because of carry from MSB int i = l; 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 printf("sum = "); print(c, l+1); return 0; }

int read(char *a) { char c; int i = 0; while(1) { c = getchar(); if(!isdigit(c)) break; 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 } return i; } void print(char *a, int l) { int i; if(a[0] != 0) printf("%d",a[0]); for(i = 1; i < l; i++) { printf("%d", a[i]); } printf("\n"); }

</syntaxhighlight>





blog comments powered by Disqus