一直得到错误的输出

问题描述 投票:0回答:1

我只是在尝试一个代码来查找一个数字是否是阿姆斯特朗数字。但即使它是阿姆斯特朗数,所有输入都会得到相同的输出。所以我使用了在线编译器并且它起作用了。

#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;
}
c visual-studio-code
1个回答
0
投票

臂弦数是等于其各位数字的立方之和的数。 立方意味着求 3 次方。

但是在这一行中:

sum += pow(lastDigit, digits);

不是乘

lastDigit
的立方(即求 3 次方),而是将其乘以
digits
的幂(即位数)。

此外,一般不建议使用

pow
进行整数求幂。

在求 3 次方的情况下,您只需将其更改为:

sum += lastDigit * lastDigit * lastDigit;
© www.soinside.com 2019 - 2024. All rights reserved.