一个简单的程序,请帮忙看一下吧
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少
下面是我的程序,怎么老是溢出呢?
#include<iostream>
#include<math.h>
using namespace std;
void main()
{
long i, x, y;
for (i=0; i<=100000; i++)
{
x= sqrt(i+100);
y = sqrt(i+286);
if ( x*x==(i+100) && y*y ==(i+286))
cout<<i;
}
cout<<endl;
}
还是我的算法就是错的?
有好算法的话,就给我写个吧,谢谢先
问题点数:10、回复次数:5Top
1 楼ykzhujiang(朱朱)回复于 2006-03-16 00:25:47 得分 5
//题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少
//下面是我的程序,怎么老是溢出呢?
#include<iostream>
#include<math.h>
#define P 0.00001
using namespace std;
void main()
{
for(int i=-100;i<=84;i++)
{
int j=sqrt(i+100);
int k=sqrt(i+268);
if(abs(j*j-i-100)<P&&abs(k*k-i-268)<P)
cout<<i<<endl;
}
cout<<endl;
}
Top
2 楼steedhorse(晨星)回复于 2006-03-16 00:35:42 得分 5
你题目里写了168,到了程序里又成了486。。。。
不过你这样把sqrt返回的double值直接转换成long,还是有风险的。还好,似乎这个题目中没有出问题。Top
3 楼steedhorse(晨星)回复于 2006-03-16 00:36:27 得分 0
写错了。应该是“你题目里写了168,到了程序里又成了186。。。。”Top
4 楼shenmea00000(学习中~~~)回复于 2006-03-16 13:57:29 得分 0
if(abs(j*j-i-100)<P&&abs(k*k-i-268)<P) //这个条件我不太明白哈,能不能解释一下?
另外我知道了自己程序的毛病了,呵呵,很幼稚的错误哈
#include<iostream>
#include<math.h>
using namespace std;
void main()
{
long i, x, y;
for (i=0; i<=100000; i++)
{
x= sqrt(i+100);
y = sqrt(i+286);
if ( x*x==(i+100) && y*y ==(i+286))
cout<<i; //这里没有空格,所以输出的值,看上去像是溢出一样,呵呵,马虎啊,真不应该
}
cout<<endl;
}
还有,用double 类型的话,输出的值是错的,不符合题意的
用int 和 long 输出的值是对的,正确的输出值为-99,21,261,1581
谢谢两位的关注,呵呵Top
5 楼shenmea00000(学习中~~~)回复于 2006-03-16 14:00:32 得分 0
这是经过我修改过的程序,结果是正确的,在VC6.0上运行通过
#include<iostream>
#include<math.h>
using namespace std;
void main()
{
int i, x, y;
for (i=-100; i<=100000; i++) //这里i初始化,应为-100,否则答案不完整的
{
x= sqrt(i+100);
y = sqrt(i+268);
if ( x*x==(i+100) && y*y ==(i+268))
cout<<i<<" ";
}
cout<<endl;
}
Top




