/************* Comprehensive Examination(II Sem 1999-2000) ****************/ /***************** Computer Programming - I **************************/ /*********************** 5th May 2000 ******************************/ /* Question: Write a function subtract that takes 2 positive integers, say num1 and num2, subtracts the smallest integer from the larger and returns the result. The function should perfromt the subtraction, as we do manually i.e., on a digit-by-digit basis. You must perform the subtraction by extracting individual digits of the 2 integers. Assume that the two integers can have a maximum of 9 digits each. Hint: It is a common practice to use arrays for such problems! */ #include <stdio.h> #define SIZE 10 //9+1 char *subtract(char*,char*); main() { char num1[SIZE],num2[SIZE],*result; read_input(num1,num2); greater_first(num1,num2); result=subtract(num1,num2); printf("%10s\n%10s\n%10s\n",num1,num2,result); } int read_input(char *str1,char *str2) { printf("Give the first number:"); scanf("%s",str1); printf("Give the second number:"); scanf("%s",str2); return 1; } int greater_first(char *str1,char *str2) { char temp_string[SIZE]; if(strcmp(str1,str2)<=0) return 0; strcpy( temp_string, str1 ); strcpy( str1, str2 ); strcpy( str2, temp_string ); return 1; } char* subtract(char *num1,char *num2) { int len1=0,len2=0; int i,carry=0; char str1[SIZE],str2[SIZE]; char *result; strcpy(str1,num1); strcpy(str2,num2); result=(char*) malloc(SIZE); for(i=0;i<SIZE-1;i++) result[i]=' '; len1=strlen(str1); len2=strlen(str2); result[len1]='\0'; for(i=1;i<=len2;i++) { if(str1[len1-i]<str2[len2-i]) { str1[len1-i-1]--; str1[len1-i]+=10; } result[len1-i]=str1[len1-i]-str2[len2-i]+'0'; //printf("%c %c %c\n",str1[len1-i],str2[len2-i],result[len1-i]); } while(len1-i>=0) { if(str1[len1-i]<'0') { str1[len1-i-1]--; str1[len1-i]+=10; } result[len1-i]=str1[len1-i]; i++; } return result; }