虽然循环终止被覆盖?
While loop termination overriden?
我有这个简单的程序来计算相对于正方形的颗粒数:
#include "library/std_lib_facilities.h"
/*There is an old story that the emperor wanted to thank the inventor of the game of chess and asked the inventor to name
his reward. The inventor asked for one grain of rice for the first square, 2 for the second, 4 for the third, and so on,
doubling for each of the 64 squares. That may sound modest, but there wasn’t that much rice in the empire! Write a
program to calculate how many squares are required to give the inventor at least 1000 grains of rice, at least 1,000,000
grains, and at least 1,000,000,000 grains.*/
int main()
{
int grains = 1;
int squares = 1;
while(grains < 1000) {
squares++;
grains *=2;
cout << grains << " rice grains for " << squares << " squares" << '\n';
}
return 0;
}
循环在每次循环后打印颗粒和正方形。这是终端中的输出:
2 rice grains for 2 squares
4 rice grains for 3 squares
8 rice grains for 4 squares
16 rice grains for 5 squares
32 rice grains for 6 squares
64 rice grains for 7 squares
128 rice grains for 8 squares
256 rice grains for 9 squares
512 rice grains for 10 squares
1024 rice grains for 11 squares
如你所见,循环终止大于grain < 1000
设置的终止条件。
我对结果没有任何问题,我只是想知道为什么循环超过了终止条件,为什么在512粒时没有停止?是因为循环体中方块的迭代吗?
因为
while(grains < 1000) { //when grain value is 512, which is true.
squares++;
grains *=2; //become 1024
cout << grains << " rice grains for " << squares << " squares" << '\n';
}
相反,您可以将 while 条件更改为 while(squares < 10)
或
int grains = 2;
int squares = 2;
while(grains < 1000) { //when grain value is 1024, which is false.
cout << grains << " rice grains for " << squares << " squares" << '\n';
grains *=2;
squares++;
}
我有这个简单的程序来计算相对于正方形的颗粒数:
#include "library/std_lib_facilities.h"
/*There is an old story that the emperor wanted to thank the inventor of the game of chess and asked the inventor to name
his reward. The inventor asked for one grain of rice for the first square, 2 for the second, 4 for the third, and so on,
doubling for each of the 64 squares. That may sound modest, but there wasn’t that much rice in the empire! Write a
program to calculate how many squares are required to give the inventor at least 1000 grains of rice, at least 1,000,000
grains, and at least 1,000,000,000 grains.*/
int main()
{
int grains = 1;
int squares = 1;
while(grains < 1000) {
squares++;
grains *=2;
cout << grains << " rice grains for " << squares << " squares" << '\n';
}
return 0;
}
循环在每次循环后打印颗粒和正方形。这是终端中的输出:
2 rice grains for 2 squares
4 rice grains for 3 squares
8 rice grains for 4 squares
16 rice grains for 5 squares
32 rice grains for 6 squares
64 rice grains for 7 squares
128 rice grains for 8 squares
256 rice grains for 9 squares
512 rice grains for 10 squares
1024 rice grains for 11 squares
如你所见,循环终止大于grain < 1000
设置的终止条件。
我对结果没有任何问题,我只是想知道为什么循环超过了终止条件,为什么在512粒时没有停止?是因为循环体中方块的迭代吗?
因为
while(grains < 1000) { //when grain value is 512, which is true.
squares++;
grains *=2; //become 1024
cout << grains << " rice grains for " << squares << " squares" << '\n';
}
相反,您可以将 while 条件更改为 while(squares < 10)
或
int grains = 2;
int squares = 2;
while(grains < 1000) { //when grain value is 1024, which is false.
cout << grains << " rice grains for " << squares << " squares" << '\n';
grains *=2;
squares++;
}