首页 > 解决方案 > 在 C 中打印 Armstrong 数字

问题描述

这是一个程序,用于查找 1-1000 之间的 Armstrong 数(数字的每个数字的立方和等于数字本身)。它正确打印了一些数字,但它没有打印 153。我的问题是为什么会这样153被排除在外了吗?先感谢您。

#include<stdio.h>
#include<math.h>
void main()
{
    int i,save,rem;
    for(i=1;i<1000;i++)
    {
        int s=0;
        int save=i;                        /*Creating copy of the 
                                           variable i.*/
        while(save!=0)
        {
            rem=save%10;
            save/=10;
            s+=pow(rem,3.0);
        }
        if(i==s)                           //Comparing i with the sum.
            printf("\n%d",i);              //Printing armstrong number.
    }
}

输出窗口的屏幕截图

标签: cmath.h

解决方案


在 Windows 7 上使用 gcc 适用于 pow。但是,此代码可能有助于您避免使用 pow() 进行四舍五入。

此代码还简化了循环并删除了保存的重新声明。

#include <stdio.h>

int main(void) {

    int i, sum, ones, tens, hunds;
    for(i = 1; i < 1000; i++) {

        sum = i/10;
        ones = i%10;
        tens = sum%10;
        hunds = sum/10;

        sum = ones*ones*ones + tens*tens*tens + hunds*hunds*hunds;


        if(i == sum)
            printf("\n%d", i);

    }

}

编辑

根据@Brij Raj Kishore 的评论,如果帖子确实打算显示所有 Armstrong 数字 1-1000,请用以下 for 循环替换上述内容。

for(i = 1; i < 1000; i++) {

    sum = i/10;
    ones = i%10;
    tens = sum%10;
    hunds = sum/10;

    if(!(hunds | tens))
        sum = ones;
    else if (hunds == 0 && tens != 0)
        sum = ones*ones + tens*tens;
    else
        sum = ones*ones*ones + tens*tens*tens + hunds*hunds*hunds;

    if(i == sum)
        printf("\n%d", i);

}

推荐阅读