求教各位大侠,关于寻找勾股数的一个程序
先粘程序:
#include<iostream>
#include<fstream>
#include<cmath>
#include<cstdlib>
using namespace std;
int main(int argc,const char*argv[])
{
bool flag=0; //是否找到参数的标记
int x,y,N,ymax; //x,y为题目中设定,N为上限,y的理论上限ymax
double z;
N=atoi(argv[1]); //字符串转换int
if (argc != 3||N<1) //判断命令行传来的参数是否符合要求
{
cout << "Wrong input!" << endl;
return -1;
}
ofstream file(argv[2]);
if(!file.is_open()) //判断是否打开
{
cout<<"Failed to open the text!"<<endl;
}
for(x=3;x<(N/sqrt(2.0));x++) //x的理论上限满足2*x*x=N*N
{
ymax=(int)sqrt((double)(N*N-x*x));
for(y=x+1;y<=ymax;y++)
{
z=sqrt((double)(x*x+y*y)); //判断是否能够整除
if(z==(int)z)
{
file<<x<<' '<<y<<' '<<(int)z<<endl; //输出
flag=1;
}
}
}
if(flag==0)
{
file<<"none"<<endl;
}
return 0;
}
在vs2008中进行调试,命令行参数中,N传到10000时候没有问题,最后一组数据是7021 7080 9971,但是到100000时候,就不能够完全执行了,最后就只到了26492 26565 37517
各位大侠,请问这是什么原因?