We can use inbuilt data types to compare two integers that fit in the range of the respective data type. As you know there is a limit of maximum integer which can be stored in a data type. We will use strings to store integers and then create a function to compare the integers. An integer can be positive, zero or negative, we will take care of it in our program.
Algorithm of comparing:
If both numbers are positive: If the length of one of them is greater than the other, the greater number is bigger. If the length of both is the same then we compare individual digits of both the numbers, if any digit of first is greater then the second then the first is bigger and vice versa. If both the digits are equal then we move to the next digits. If the string ends then both the numbers are equal.
If anyone of the number is negative then the positive number is the bigger one.
If both the numbers are negative then the logic is the same as that of the comparing positive numbers except for one thing: the number which is smaller in magnitude is the larger one.
C program to compare numbers using string
#include <string.h>
int compare(char [], char []);
int main()
{
char a[1000], b[1000];
int n;
printf("Enter two integers\n");
scanf("%s%s", a, b);
n = compare(a, b);
if (n == 1)
printf("First.\n");
else if (n == 0)
printf("Equal.\n");
else
printf("Second.\n");
return 0;
}
int compare(char a[], char b[]) {
int l1, l2, p1, p2, n;
// Checking if any of the numbers is negative
if (a[0] == '-')
p1 = 0;
else
p1 = 1;
if (b[0] == '-')
p2 = 0;
else
p2 = 1;
// Calculating length of strings
l1 = strlen(a);
l2 = strlen(b);
// Both numbers positive
if (p1 == 1 && p2 == 1) {
if (l1 > l2)
return 1;
else if (l2 > l1)
return 2;
else {
for (n = 0; n < l1; n++) {
if (a[n] > b[n])
return 1;
if (b[n] > a[n])
return 2;
}
if (n == l1) // Can be removed (optional)
return 0;
}
}
// If one number is positive and other is negative
if (p1 == 1 && p2 == 0) // 1st no positive
return 1;
if (p1 == 0 && p2 == 1) // 2nd no positive
return 2;
// If both numbers negative
if (l1 < l2)
return 1;
if (l2 < l1)
return 2;
for (n = 1; n < l1; n++) {
if (a[n] < b[n])
return 1;
if (b[n] < a[n])
return 2;
}
return 0; // Both numbers (-ve) are same.
}