我将这两段代码作为我的家庭作业。代码对我来说看起来很好,但无论如何都不会打印出我想要的内容。实际上,控制台输出仍然是完全空的。
第一个程序应该打印出符合ladna()
功能要求且介于1
和a
之间的所有数字:
#include <iostream>
using namespace std;
int a;
int i = 1;
bool ladna(int a)
{
if((((a>>4)*5+a*2)%3)==1)
return true;
else
return false;
}
int main()
{
cerr << "Podaj liczbe: " << endl;
cin >> a;
while (i <= a){
if (ladna(a)){
cout << i << " ";
}
i++;
}
}
ladna()
函数是预制的,我必须按原样使用它。
我尝试将while
更改为do...while
和for
,但没有帮助。不能使用cerr
。
第二个代码必须打印出数字a
的所有自然除数。
#include <iostream>
using namespace std;
int main()
{
int a;
cerr << "Podaj liczbe" << endl;
cin >> a;
for (int i = 0; i >= a; i++){
if (a % i == 0){
cout << i << endl;
}
}
return 0;
}
也不起作用。
对我来说,看起来两段代码都有相同的问题,因为它们是以相同的方式编写的,基于相同的原理,并且错误是相同的。因此我的假设是,原因也是一样的。
不幸的是,对于我的爱,我根本看不出错误是什么......
答案 0 :(得分:1)
第一个代码:
我认为你应该用i调用ladna函数,比如ladna(i)
对于第二个代码:
在for
中,它应为i<=a
'%'是模运算符,在执行(a%i)
期间,你用i除以并取余数,因为我从零开始,你将得到“浮点异常(核心转储)”零。因此,for
应该以1开头。这应该有效:
for (int i = 1; i <= a; i++){
if (a%i == 0){
cout << i << endl;
}
}