C程序 寻找两个整数之间的阿姆斯特朗数字
一个有n个数字的正整数被称为阶数为n的阿姆斯特朗数(阶数是数字的数量),如果
abcd… = pow(a,n) + pow(b,n) + pow(c,n) + pow(d,n) + …
在这里,我们将建立一个C程序来打印两个整数之间的阿姆斯特朗数字。
例子。
153 is an Armstrong number
1*1*1 + 5*5*5 + 3*3*3 = 153
370 is an Armstrong Number
3*3*3 + 7*7*7 + 0*0*0 = 370
输入:
lowerlimit = 100
higherlimit = 400
输出:
153 370 371
下面是打印用户提供的下限和上限之间所有阿姆斯特朗数字的程序。
// C Program to Demonstrate
// Armstrong numbers between
// two integers
#include <math.h>
#include <stdio.h>
int power(int x, unsigned int y)
{
// Initialize result
int res = 1;
while (y > 0) {
// If y is odd, multiply
// x with result
if (y & 1)
res = res * x;
// y must be even now
y = y >> 1; // y = y/2
x = x * x; // Change x to x^2
}
return res;
}
int main()
{
int lowerlimit, higherlimit;
printf("Enter lowerlimit and Higher limit:\n ");
scanf("%d%d", &lowerlimit, &higherlimit);
for (int i = lowerlimit + 1; i < higherlimit; ++i) {
int x = i;
int n = 0;
// number of digits calculation
while (x != 0) {
x /= 10;
++n;
}
int powersum = 0;
x = i;
// finding the sum of n
// th power of its digits
while (x != 0) {
int digit = x % 10;
powersum += power(digit, n);
x /= 10;
}
// checking if the obtained
// number is armstrong or
// not
if (powersum == i)
// printing the result
printf("%d ", i);
}
printf("\n");
return 0;
}
输出:
Enter lowerlimit and Higher limit: 100 400
153 370 371