在我们平常的认知中,初学者一般都会认为在for循环中,i<N+1和i<=N是可以相互替换的,所以也会认为i<sqrt(N)+1和i<=sqrt(N)也是可以相互替换的,下面我来举几个例子来说明他们是否可以相互替换。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int N,count=0,num=0;
cin>>N;
for(int i=0;i<=sqrt(N);i++)
{
count+=i;
}
for(int i=0;i<sqrt(N)+1;i++)
{
num+=i;
}
cout<<count<<endl<<num;
return 0;
}
我们先对N赋值一个10:
结果显示如此小的数它们就不相等了,我们继续分别把i值和开方值打印出来看一下
代码段:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int N,count=0,num=0;
cin>>N;
for(int i=0;i<=sqrt(N);i++)
{
cout<<"i="<<i<<"|sqrt(N)="<<sqrt(N)<<" ";
count+=i;
}
cout<<endl;
for(int i=0;i<sqrt(N)+1;i++)
{
cout<<"i="<<i<<"|sqrt(N)="<<sqrt(N)<<" ";
num+=i;
}
return 0;
}
结果段:
发现一个 一个执行到了i=3,一个执行到了i=4;上部分:3<=3.16228而下部分:4<3.16228+1;
说明sqrt函数返回的是double类型,就会导致题中不能替换的结果。
sqrt源码函数: