我只是在尝试一个代码来查找一个数字是否是阿姆斯特朗数字。但即使它是阿姆斯特朗数,所有输入都会得到相同的输出。所以我使用了在线编译器并且它起作用了。
#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;
}
在这一行中:
sum += pow(lastDigit, digits);
您使用
pow
,它是浮点值函数,而不是整数函数。请在此处查看更多信息:pow 函数的奇怪行为。
相反,您应该使用基于整数的幂运算。 这篇文章提出了一种使用以下函数的有效方法:
int ipow(int base, int exp)
{
int result = 1;
for (;;)
{
if (exp & 1)
result *= base;
exp >>= 1;
if (!exp)
break;
base *= base;
}
return result;
}
然后:
sum += ipow(lastDigit, digits);
旁注:
您应该检查
scanf
的返回值(在您的情况下应该为 1)以验证您是否获得了正确的输入。