循环中未除法的数字

  • 本文关键字:数字 除法 循环 c++
  • 更新时间 :
  • 英文 :


我刚开始使用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;

最新更新