我只是在尝试一个代码来查找一个数字是否是阿姆斯特朗数字。但即使它是阿姆斯特朗数,所有输入都会得到相同的输出。所以我使用了在线编译器并且它起作用了。
#include <stdio.h>
#include <math.h>
int main() {
int originalNum, num, lastDigit, digits, sum;
/* Input number from user */
printf("Enter any number to check Armstrong number: ");
scanf("%d", &num);
sum = 0;
originalNum = num;
/* Calculate the number of digits in the input number */
for (digits = 0; originalNum > 0; digits++) {
originalNum /= 10;
}
originalNum = num;
/* Compute the sum of the cubes of individual digits */
while (originalNum > 0) {
lastDigit = originalNum % 10;
sum += pow(lastDigit, digits);
originalNum /= 10;
}
/* Check if the sum equals the original number */
if (sum == num) {
printf("%d is an Armstrong number.\n", num);
} else {
printf("%d is not an Armstrong number.\n", num);
}
return 0;
}
在这一行中:
您使用的
pow
是浮点值函数,而不是整数函数。请参阅此处的更多信息:Strange behavior of the pow function。相反,您应该使用基于整数的幂运算。 这篇文章提出了一种使用以下函数的有效方法:
进而:
旁注:
您应该检查返回值
scanf
(在您的情况下应该为 1)以验证您是否获得了正确的输入。