Question:How to get division of two very large numbers larger or beyond than long int in c programming language.
Answer
#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: 443Alternate 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