鱼C论坛

 找回密码
 立即注册
查看: 4367|回复: 11

求完全平方数的问题,代码如下,不知道是那里敲错了,没有结果,

[复制链接]
发表于 2011-8-11 14:19:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  1. #include <stdio.h>
  2. #include <math.h>

  3. void main ()
  4. {
  5. int x;

  6. double i,j;
  7. for (x=1;x<=10000;x++)
  8. {
  9.   i= sqrt (x+100);
  10.   j= sqrt (x+268);
  11.   
  12.   if (i*i==x+100&&j*j==x+268)
  13.    printf ("%d\n",x);
  14. }

  15. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-11 14:54:21 | 显示全部楼层
楼主你好,我也不太懂,说错勿怪。i= sqrt (x+100); j= sqrt (x+268);if (i*i==x+100&&j*j==x+268)
个人觉得这几条代码抵消了,因为i,j是double类型,随便一个数开根号都有结果,再平方又还原成原来的数,还有不太明白你要求的是什么?1~10000之间的平方数还是什么不清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-11 16:16:46 | 显示全部楼层
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
楼主没有错!可能是楼主编译不出结果吧
  1. #include<stdio.h>
  2. #include "math.h"
  3. int main(void)
  4. {
  5.         long int         i,x,y,z;
  6.        
  7.         for ( i = 1; i < 100000; i++) {
  8.        
  9.                 x=sqrt(i+100);
  10.                 y=sqrt(i+268);
  11.                
  12.                 if(x*x == i+100 && y*y == i+268)
  13.                         printf("\n%ld\n",i);
  14.         }
  15.         getch();
  16. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-11 16:21:56 | 显示全部楼层
楼主把double i,j 换成 float i,j ,就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-11 20:24:28 | 显示全部楼层
回复 3L
long int 还不知道是什么意思呢,还没学习到那,
回复4L, double 换成 float 有试过了,不过算出来,答案也不对,而且是有3个答案,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-11 21:44:40 | 显示全部楼层
long int 算出来也是有三个答案,不知道对不对,反正double一定不对,你可以试试,double出来结果只是输出了1~10000,就像我2楼所说代码效果抵消
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-12 07:49:47 | 显示全部楼层
貌似这跟编译器有关,我用vc6.0运行,输出的是1-10000。原因楼上的说了,用dev运行21,261,1581三个结果,本来应该也是输出1-10000的,原因还没找到。如果要判断一个数是不是完全平方数,要开方取整,然后再平方。判断这个数是否等于原来的数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-12 09:43:32 | 显示全部楼层

额,你的问题应该是 “一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? ”

那1~10000之间有3个答案是没有问题的吧?

你那里的答案有多少个呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-12 21:28:26 | 显示全部楼层
zhu1412043 发表于 2011-8-11 16:21
楼主把double i,j 换成 float i,j ,就可以了

你这个把double换成float有用么,换成int还差不多{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-13 09:56:58 | 显示全部楼层
/db_八神_/zq 发表于 2011-8-12 21:28
你这个把double换成float有用么,换成int还差不多

是的。。int 更简洁明了。。。

不过float也是可以的,你可以试一下{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-13 16:12:18 | 显示全部楼层
zhu1412043 发表于 2011-8-13 09:56
是的。。int 更简洁明了。。。

不过float也是可以的,你可以试一下

还真行,不过,一般人的思路,应该是用int, 这个float也行,有点不明白,有可能是精度的问题吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-14 23:29:47 | 显示全部楼层
本帖最后由 ZPCG 于 2011-8-15 01:12 编辑

错误在这里:
你定义的是
int x;
double i,j;
在if (i*i==x+100&&j*j==x+268)这句时,1、由于类型不同,精度不一样 i*i永远不会==x+100
或者2、出现平子队长回复所说的抵销问题.
所以说要这样 int x, i, j;这样就可以了。
比如说:


  1. #include<stdio.h>
  2. #include "math.h"
  3. void main()
  4. {
  5. int i,x,y;
  6. for ( i = 1; i < 100000; i++)
  7.     {
  8.      x=sqrt(i+100);
  9.      y=sqrt(i+268);
  10.        if (x*x == i+100 && y*y == i+268)
  11.           printf("\n%d\n",i);
  12.      }
  13. }
复制代码
得出的结果是:21    261   1581。
话说回来,如果你的脾气实在犟,一定要int x;而且也要 double i, j;那也行,可以象下面代码一样,你想用double或 float或 int都OK的。
  1. #include <stdio.h>
  2. #include <math.h>

  3. void main ()
  4. {
  5. int x;

  6. double i,j;
  7. for (x=1;x<=10000;x++)
  8. {
  9. i= sqrt (x+100);
  10. j= sqrt (x+268);

  11. if ((int)i*(int)i==x+100 && (int)j*(int)j==x+268)
  12. printf ("%d\n",x);
  13. }

  14. }
复制代码

得出的结果照样是:21    261   1581。
本回复代码均经VC++6.0通过.请楼主验证.

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 13:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表