我只是在尝试一个代码来查找一个数字是否是阿姆斯特朗数字。但即使它是阿姆斯特朗数,所有输入都会得到相同的输出。所以我使用了在线编译器并且它起作用了。
#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;
}
臂弦数是等于其各位数字的立方之和的数。 立方意味着求 3 次方。
但是在这一行中:
sum += pow(lastDigit, digits);
不是乘
lastDigit
的立方(即求 3 次方),而是将其乘以 digits
的幂(即位数)。
此外,一般不建议使用
pow
进行整数求幂。
在求 3 次方的情况下,您只需将其更改为:
sum += lastDigit * lastDigit * lastDigit;