求教各位大侠,关于寻找勾股数的一个程序

songy193184 2011-09-21 10:23:24
先粘程序:
#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
各位大侠,请问这是什么原因?
...全文
92 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
小坏猪猪 2011-09-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 aimida 的回复:]
同学你好,我是吴及,作为THU的学生,注意自己思考,不要没事就找别人,小心期末挂科!!
[/Quote]

啥玩意儿???
aimida 2011-09-23
  • 打赏
  • 举报
回复
同学你好,我是吴及,作为THU的学生,注意自己思考,不要没事就找别人,小心期末挂科!!
nice_cxf 2011-09-21
  • 打赏
  • 举报
回复
应该是计算 x*x+y*y的时候,int型不够大溢出了,在里面转double
另外z==(int)z,double类型不能这样判相等

songy193184 2011-09-21
  • 打赏
  • 举报
回复
各位大虾帮帮忙撒

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧