为什么只打印一个阿姆斯壮号码?

时间:2016-03-15 21:51:08

标签: c++

这是我的任务:

  

阿姆斯壮的三位数是一个整数,总和为   其数字的立方体等于数字本身。例如,   153是阿姆斯特朗的数字,因为1 ^ 3 + 5 ^ 3 + 3 ^ 3 = 153.写一个   名为is_armstrong的函数,它取一个正整数   参数并返回一个布尔变量,如果数字为,则为true   一个阿姆斯特朗号码,否则返回假。使用此功能   main()函数中的is_armstrong打印所有阿姆斯壮的数字   范围为100和999

我写了一个程序,但它只打印出一个数字,999。任何人都可以指出我的错误吗?非常感谢。

#include <iostream>

using namespace std;

//Function name: getRaiseAndAdd
//Purpose: Calculate each digit cubed and the sum of the results.
//We are sending in the current number from the loop starting at 100 and
//counting one by one to 999.
//Parameters: &numberInput
//Return value: Result of adding 3 numbers
int getRaiseAndAdd(int &numberInput)
{
int firstNumber, secondNumber, thirdNumber;
int remainder;
int sum;
int firstPower, secondPower, thirdPower;

firstNumber = numberInput / 100;
remainder = numberInput % 100;
secondNumber = remainder / 10;
thirdNumber = remainder % 10;

firstPower = firstNumber * firstNumber * firstNumber;
secondPower = secondNumber *secondNumber * secondNumber;
thirdPower = thirdNumber * thirdNumber * thirdNumber;

return sum = firstPower + secondPower + thirdPower;
}

int main()
{
int answer;
int originalNumber;

    for(int i = 100; i < 1000; i++)
        {
        originalNumber = i;
        answer = getRaiseAndAdd(i);
        }

        {
        //Function name: is_Armstrong
        //Purpose: finding the Armstrong numbers
        //Parameters: answer
        //Return value: 0
        bool is_Armstrong (int answer);
        if(answer == originalNumber);
                {
                cout<<"found an Armstrong number "<<originalNumber<<endl;
                }
        }
return 0;
}

4 个答案:

答案 0 :(得分:3)

您的代码存在一些问题(但您的阿姆斯特朗功能似乎很好)。首先,在循环浏览所有内容之后,您的代码将检查数字是否为一个非常强的数字。这需要在循环内部完成,以便检查每个数字。

其次,if(if (answer == originalNumber); {...})后面有一个分号。这导致执行无条件地进入下一个块,这就是为什么它打印出999(顺便说一下这不是一个非常强的数字)。

所以修复方法是将你的支票移入循环并在if后删除分号。

答案 1 :(得分:1)

首先你正在运行这个循环:

dictionary

此后classOf1969let classOf1969 = ClassOfStudents(className: "Class of 1969", students: [ Student(name: "A name", age: 25), Student(name: "B name", age: 25) ]) let parameters = classOf1969.dictionary ,答案也为for(int i = 100; i < 1000; i++) { originalNumber = i; answer = getRaiseAndAdd(i); }

稍后您才会运行此检查:

originalNumber

你应该检查一个正确的函数,你有一个前向声明,然后是一个块,并在循环中调用它。

答案 2 :(得分:0)

从主方法开始到结束,您打印一次。如果您在循环中重复打印,您将获得多次打印。

答案 3 :(得分:0)

凯文说: 将Check放入循环可以解决您的问题

for(int i = 100; i < 1000; i++)
    {
    originalNumber = i;
    answer = getRaiseAndAdd(i);
    if(answer == originalNumber)
            {
            cout<<"found an Armstrong number "<<originalNumber<<endl;
            }
    }

跑吧并得到结果

result