C code for division of very
big numbers:
#include<stdio.h>
#include<string.h>
#define MAX 10000
int validate(char []);
char * division(char[],long);
long int remainder;
int main(){
char dividend[MAX],*quotient;
long int divisor;
printf("Enter
dividend: ");
scanf("%s",dividend);
if(validate(dividend))
return 0;
printf("Enter
divisor: ");
scanf("%ld",&divisor);
quotient
= division(dividend,divisor);
while(*quotient)
if(*quotient ==48)
quotient++;
else
break;
printf("Quotient:
%s / %ld = %s",dividend,divisor,quotient);
printf
("\nRemainder:
%ld",remainder);
return 0;
}
int validate(char num[]){
int i=0;
while(num[i]){
if(num[i] < 48
|| num[i]> 57){
printf("Invalid positive integer:
%s",num);
return 1;
}
i++;
}
return 0;
}
char * division(char dividend[],long divisor){
static char quotient[MAX];
long temp=0;
int i=0,j=0;
while(dividend[i]){
temp
= temp*10 + (dividend[i] -48);
if(temp<divisor){
quotient[j++]
= 48;
}
else{
quotient[j++]
= (temp / divisor) + 48;;
temp
= temp % divisor;
}
i++;
}
quotient[j]
= '\0';
remainder
= temp;
return quotient;
}
Sample
output:
Enter dividend: 543109237823560187
Enter divisor: 456
Quotient: 543109237823560187 / 456 = 1191029030314824
Remainder: 443
Other program (source code):
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
#define MAX 10000
char * division(char [],unsigned long);
int main(){
char a[MAX];
unsigned long b;
char *c;
printf("Enter
the divdend : ");
scanf("%s",a);
printf("Enter
the divisor : ");
scanf("%lu",&b);
c
= division(a,b);
printf("\nQuotient
of the division : ");
printf("%s",c);
return 0;
}
char * division(char a[],unsigned long b){
static char c[MAX];
int la;
int i,k=0,flag=0;
unsigned long
temp=1,reminder;
la=strlen(a);
for(i=0;i<=la;i++){
a[i]
= a[i] - 48;
}
temp
= a[0];
reminder
= a[0];
for(i=1;i<=la;i++){
if(b<=temp){
c[k++]
= temp/b;
temp
= temp % b;
reminder
= temp;
temp
=temp*10 + a[i];
flag=1;
}
else{
reminder
= temp;
temp
=temp*10 + a[i];
if(flag==1)
c[k++]
= 0;
}
}
for(i=0;i<k;i++){
c[i]=c[i]+48;
}
c[i]=
'\0';
printf("Reminder
of division: %lu ",reminder);
return c;
}
Sample
output:
Enter the divdend:
55555555555555555555555555555555555555555
Enter the divisor: 5
Reminder of division: 0
Quotient of the division:
11111111111111111111111111111111111111111
Logic of the program Division of large numbers
Algorithm:
As we know in c there are not any
such data types which can store a very large numbers. For example we want to solve the expression:
4928351200966342333331289107/34269
Number 4928351200966342333331289107
is beyond the range of even long int or long double. Then question is how to store such a big
numbers in c?
Solution is very simple i.e. using
array. Above program has used same logic that is we are using as usual logic to solve
the expression except instead of storing the data in the normal variables we are
storing into the array.
0 comments:
Post a Comment