这是我的任务:
阿姆斯壮的三位数是一个整数,总和为 其数字的立方体等于数字本身。例如, 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;
}
答案 0 :(得分:3)
您的代码存在一些问题(但您的阿姆斯特朗功能似乎很好)。首先,在循环浏览所有内容之后,您的代码将检查数字是否为一个非常强的数字。这需要在循环内部完成,以便检查每个数字。
其次,if(if (answer == originalNumber); {...}
)后面有一个分号。这导致执行无条件地进入下一个块,这就是为什么它打印出999(顺便说一下这不是一个非常强的数字)。
所以修复方法是将你的支票移入循环并在if后删除分号。
答案 1 :(得分:1)
首先你正在运行这个循环:
dictionary
此后classOf1969
将let 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;
}
}
跑吧并得到结果