使用C ++查找Armstrong数字

时间:2016-06-27 03:30:52

标签: c++ algorithm

我正在编写一个程序,用于查找给定数字是否为Armstrong Number

int main()
{
    int n,rem,sum=0;
    cout<<"Enter the Number for checking"<<endl;
    cin>>n;

    while(n!=0)
    {
        rem=n%10;
        sum=sum+(rem*rem*rem);
        n=n/10;
    }

    if(sum==n)
    {
        cout<<"Armstrong Number"<<endl;
    }
    else
    {
        cout<<"It's not a armstrong number";
    }

    return 0;
}

当我运行它时,它总是报告&#34;它不是一个非常强的数字&#34;,无论输入如何。

我按如下方式更改了代码,并得到了正确的结果。但是我不明白为什么我需要为n1分配输入并执行操作 - 为什么我不能直接使用n进行操作?

int main()
{
    int n,rem,sum=0,n1;
    cout<<"Enter the Number for checking"<<endl;
    cin>>n;
    n1=n;

    while(n1!=0)
    {
        rem=n1%10;
        sum=sum+(rem*rem*rem);
        n1=n1/10;
    }

    if(sum==n)
    {
        cout<<"Armstrong Number"<<endl;
    }
    else
    {
        cout<<"It's not a armstrong number";
    }

    return 0;
}

5 个答案:

答案 0 :(得分:5)

sum行中,您的计划会比较nn。在第二个程序中n==0是用户输入的初始编号。但是在第一个程序if (sum==n)中(参见上面的循环)。

因此,在第一个程序中,支票if (sum==0)的作用为sum。但main()的值永远不为0(除非用户输入0)。所以,第一个程序总是返回“这不是一个非常强的数字”。

关于样式:使用函数而不是将整个逻辑放在一个int getSumOfCubesOfDigits(int n) { int sum = 0; while (n) { const int rem = n % 10; sum += rem * rem * rem; n = n / 10; } } 函数中要好得多。例如,您可以创建一个函数来计算阿姆斯特朗数字的中间和:

int main()
{
    int n;
    cout << "Enter the Number for checking" << endl;
    cin >> n;
    if(getSumOfCubesOfDigits(n) == n)
        cout<<"Armstrong Number"<<endl;
    else
        cout<<"It's not a armstrong number";
    return 0;
}

在这种情况下,您的程序将变得更加简单,并且很难在您的问题的第一个程序中犯下错误:

Meteor 1.3

答案 1 :(得分:2)

在第一个程序中,原始数字输入'n'。你的逻辑中唯一的问题是,你忘了当你退出while循环时,'n'将不再是你的原始数字,因为你反复做n = n / 10,因此'sum == n'即使对阿姆斯特朗号码也不满意。

因此,在进入while循环之前,将原始数字保存到另一个变量中,例如n1(在您提供的第二个程序中完成),并且仅使用n1进行操作,即n1 = n1 / 10。单独留下n,以便最后'n'仍然包含原始数字,你最终可以将其与'sum'进行比较以找到你的答案。

答案 2 :(得分:1)

你比较哪个号码? ,在while循环的第一个程序中,n值被改变(在这个变量中得到输入),最后用sum == n检查,所以它总是得到条件失败。

因此需要temp(n1)变量来比较最终结果

答案 3 :(得分:0)

您的代码在第二个代码块中有所不同,您仍在测试sum = n。

在第二个代码块中,如果你测试了if(sum = n1),我会怀疑它是否会起作用。

答案 4 :(得分:0)

我找到了找到阿姆斯特朗数的方法

int main() {
    for (int i=10; i<=9999; i++) {
        int k = i,z = 1, s = 0, n = i;
        while ((k/=10) > 0) z++;
        for (int t = z; t; t--, n/=10) {
            s += pow(n % 10, z);
        }
        if (i == s) cout << i << endl;
    }
    return 0;
}