不是我没研究,而是很蛋疼,求解答。。。。。。。。
#include<stdlib.h>
#include<stdio.h>
void main()
{
for (int i=100;i<=200;i++)
{
bool b = false;
for (int j=2;j<i-1;j++)
{
int k = i%j;
if (k==0)
{
b=true;
}
}
if (!b)
{
printf("%d\n",i);
}
}
system("pause");
}
这个程序用来实现什么功能的我就不说了,只是觉得,很纳闷的一点,从判断k==0开始,我举个例子,100/2是没有余数的,也就是说k=0,此时b=true,可是问题来了,100/3是有余数的,按照程序结构来说,此时b应该是false吧。我就纠结这一点了,不是说计算机是很精准的吗。。。。。。。。。。。。。。。。。。
[解决办法]
- C/C++ code
#include<stdlib.h>#include<stdio.h>void main(){for (int i=100;i<=200;i++){bool b = false;for (int j=2;j<i-1;j++){int k = i%j;if (k==0){b=true;break; /*已经确定不是素数了,那么就要进行下一个了,让i自增并判断,而不是继续让j循环了。*/}}if (!b){printf("%d\n",i);}}system("pause");}
[解决办法]
楼主注意了,你这个程序只要有一个 i%j 的值为 0 ,则程序会进入 b=true ,如果 b=true 成立则不会输出这个值,程序是正确的,100%3 是不等于 0 ,可是 100%2 等于 0 ,当 b=true 以后没有对 b 的值进行改变,所以肯定不会输出 100 了。
[解决办法]
for (int j=2;j<i-1;j++)
{
int k = i%j;
if (k==0)
{
b=true;
}
}
这个循环里,如果一旦满足了k==0,则b在变成true后就不会再变回来了