/* * Program to Display Armstrong Numbers Between Two Intervals * It does this same as armstint.c, but uses long data types to be able fight Armstrong Numbers over 65536 */ #include unsigned long pow(int, int); /* Entry point to program */ int main() { unsigned long low, high, i, temp1, temp2, rem, n = 0, result = 0; printf("Enter two numbers(intervals): "); scanf("%ld %ld", &low, &high); printf("Armstrong numbers between %lu and %lu are: ", low, high); for (i = low + 1; i < high; ++i) { temp2 = i; temp1 = i; /* Number of digits calculation */ while (temp1 != 0) { temp1 /= 10; ++n; } /* Result contains sum of nth power of its digits */ while (temp2 != 0) { rem = temp2 % 10; result += pow(rem, n); temp2 /= 10; } /* Check if i is equal to the sum of nth power of its digits */ if (result == i) { printf("%ld ", i); } /* Resetting the values */ n = 0; result = 0; } return 0; } unsigned long pow(int base, int exponent) { unsigned long pow = 1; for (exponent; exponent > 0; exponent--) { pow = pow * base; } return pow; }