在c中生成armstrong数到第N个数不起作用

在c中生成armstrong数到第N个数不起作用,c,math,C,Math,我正在尝试将阿姆斯特朗号码生成为第n个号码。因此,我为此编写了一个代码,但它不起作用。每次我输入999或10000之类的号码时,它只返回0…有人能帮我找出此代码的错误吗: #include <stdio.h> #include <math.h> int main() { double remainder,n=0; int number,sum = 0,q,x,count; printf("Enter an integer upto which y

我正在尝试将阿姆斯特朗号码生成为第n个号码。因此,我为此编写了一个代码,但它不起作用。每次我输入999或10000之类的号码时,它只返回0…有人能帮我找出此代码的错误吗:

#include <stdio.h>
#include <math.h>
int main()
{
    double remainder,n=0;
    int number,sum = 0,q,x,count;

    printf("Enter an integer upto which you want to find armstrong numbers:");
    scanf("%d",&number);
    printf("\nFollowing armstrong numbers are found from 1 to %d\n",number);

    for( count = 1 ; count <= number ; count++ )
    {
        q = count;
        x = count;
        for(;x != 0;)
         {
          x =x / 10;
          n = n + 1;
         }
        while(q != 0)
        {
           remainder = q % 10;
           sum = sum +(pow(remainder,n));
           q = q / 10;
        }
        if ( count == sum ){
        printf("%d\n", count);
        }
        sum = 0;
        }

   return 0;
}
#包括
#包括
int main()
{
双余数,n=0;
整数,和=0,q,x,计数;
printf(“输入一个整数,最多可找到阿姆斯特朗数:”;
scanf(“%d”和编号);
printf(“\n在1到%d之间找到以下阿姆斯特朗编号”,编号);

对于(count=1;count您必须在
count
的循环内将
n
初始化为零。并注意对
pow
的结果进行适当的舍入,例如向其添加
0.5

我这样做了,现在它正在工作并将阿姆斯特朗数返回到第n位,但它没有将153作为阿姆斯特朗数返回。为什么?奇怪。我确实得到了153。您使用的是
pow
,因此在将其结果截断为
int
时可能会有一些舍入错误。尝试将
0.5
添加到
pow
的结果中,而不是添加0.5,统一的方法是使用
round()
,如
sum=sum+round(pow(余数,n));