我刚开始使用C++,通常对Java很熟悉,但我遇到了一个逻辑错误。
int main()
{
int number;
cout << "Number: " << endl;
cin >> number;
while (number != 0 || number > 0) {
number/3;
cout << number << endl;
}
if (number = 0) {
cout << "True" << endl;
}
else {
cout << "False" << endl;
}
return 0;
}
我想检查输入的数字是否可以被3整除,但它只是重复打印数字而不是除法?为什么number/3;
不工作?
几个问题:
此行:
if (number = 0) {
将0赋值给数字,而不是与之进行比较。然后整个表达式计算为false
,无论输入如何,else
子句都将执行并打印"False"
。如果要进行比较,请使用==
运算符。
但你的主要算法有一个问题:
while (number != 0 || number > 0) {
number/3;
cout << number << endl;
}
首先,number/3
不会做任何事情,因为您没有将结果分配给任何东西。更好:
number = number / 3;
但这并不重要,因为整数除法所做的只是去掉余数。因此,即使您进行了此修复,该循环也会将number
的任何正值减少到0
。如果用户键入17,则算法会将number
减少为以下值:
number = 17 / 3; // prints 5
number = 5 / 2; // prints 2
number = 2 / 3; // prints 0
然后你的代码仍然认为17可以被3整除。
最后,如果你只想看看一个数字";可被";,使用模%
运算符。这将计算除法表达式的余数。适用于正数和负数。
if (number % 3 == 0) {
printf("number is divisible by 3n");
}
但我认为你追求的算法实际上是这样的:
int result = number / 3;
if (result*3 == number) {
printf("number is divisible by 3n");
}
number = number / 3;
和if (number == 0)
。应与Java
相同
int main()
{
int number;
cout << "Number: " << endl;
cin >> number;
while (number != 0 || number > 0) {
number = number/3;
cout << number << endl;
}
if (number == 0) {
cout << "True" << endl;
}
else {
cout << "False" << endl;
}
return 0;
}
您需要将数字/3分配给变量才能更改其值。这可以简单地通过声明来实现:number = number/3;
或者在某些语言中:
number /= 3;
更改编号/3;到数字=数字/3;