CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  非技术区

一个简单的程序,请帮忙看一下吧

楼主shenmea00000(学习中~~~)2006-03-16 00:04:39 在 C/C++ / 非技术区 提问

题目:一个整数,它加上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

相关问题

  • 请帮我看一下这个简单的程序
  • 简单程序,帮忙看一下!
  • 请帮忙看一下?一个非常简单的小程序!马上结贴!!
  • 请帮忙看一下这段程序
  • 请看一下如下的程序。
  • 请看一下这个程序???
  • 请帮忙看一下这个程序
  • 挺简单的,请帮助看一下
  • sco下的一个最简单的SOCKET程序,就是编译通不过,请帮忙看一下
  • 各位高人 请帮忙看一下这个简单的登录程序,在线等

关键词

  • 程序
  • 完全平方数
  • 加上
  • using namespace std
  • void main
  • include
  • long

得分解答快速导航

  • 帖主:shenmea00000
  • ykzhujiang
  • steedhorse

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo