鱼C论坛

 找回密码
 立即注册
查看: 3199|回复: 12

[技术交流] 做出来一道题好高兴啊

[复制链接]
发表于 2012-8-5 18:20:53 | 显示全部楼层 |阅读模式

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

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

x
鱼C前辈找的经典例题100道的原题;但是答案编译后总是错的,我也觉得它好像是错的————不确定,因为水平低,可能是自己的问题。我把两端代码发上来大家看下啊。欢迎指教。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-5 18:21:47 | 显示全部楼层
问题是:有这样一个整数,它加100后是一个完全平方数;再加168还是一个完全平方数,求这个数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-5 18:24:12 | 显示全部楼层
例题的答案是:
#include "math.h"
main()
{
long int i,x,y,z;
for (i=1;i<100000;i++)
  { x=sqrt(i+100);   /*x为加上100后开方后的结果*/
   y=sqrt(i+268);   /*y为再加上168后开方后的结果*/
    if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
     printf("\n%ld\n",i);
  }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-5 18:42:08 | 显示全部楼层
但是不能过编译都,会报错。
我的代码是:

#include <stdio.h>
#include <math.h>
void main()
{
        int a , b , c , x , y ;
        for(a=0;a<1000000;a++)
        {
                b=a+100;
                c=b+168;
                x=sqrt(b);
                y=sqrt(c);
                if(x*x==b&&y*y==c)
                        printf("%d\n",b-100);
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-5 18:43:48 | 显示全部楼层
编译的结果是21
                  261
                  1581
  但是我自己想过 ,如果原来的整数是-99,其实也是可以的。但是答案是没考虑负数的范围的,请大家指教下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-5 18:56:32 | 显示全部楼层
  1. #include "math.h"
  2. #include<stdio.h>
  3. int main()
  4. {
  5.         long int i,x,y,z;
  6.         for (i=1;i<100000;i++)
  7.         {
  8.                 x=(int)sqrt(i+100);/*x为加上100后开方后的结果*/
  9.                 y=(int)sqrt(i+268);/*y为再加上168后开方后的结果*/
  10.                 if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
  11.                 printf("\n%ld\n",i);
  12.         }
  13. }
复制代码
代码对对齐,多余的东西去掉就能过编译
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-6 10:08:22 | 显示全部楼层
本帖最后由 颓废的青春 于 2012-8-6 10:10 编辑


只要让for里面的 i=-100000,不就可以了嘛,代码如下:
  1. #include "math.h"
  2. #include<stdio.h>
  3. int main()
  4. {
  5.         long int i,x,y,z;
  6.         for (i=-100000;i<100000;i++)
  7.         {
  8.                 x=(int)sqrt(i+100);/*x为加上100后开方后的结果*/
  9.                 y=(int)sqrt(i+268);/*y为再加上168后开方后的结果*/
  10.                 if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
  11.                 printf("\n%ld\n",i);
  12.         }
  13. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-6 14:20:48 | 显示全部楼层
五月跳回家 发表于 2012-8-5 18:56
代码对对齐,多余的东西去掉就能过编译

多余的东西?我用ait+F8矫正的格式啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-6 14:22:24 | 显示全部楼层
颓废的青春 发表于 2012-8-6 10:08
只要让for里面的 i=-100000,不就可以了嘛,代码如下:

嗯 ,我也想了 。没试试  ,刚试了 ,正确 。谢谢啊 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-6 14:23:49 | 显示全部楼层
五月跳回家 发表于 2012-8-5 18:56
代码对对齐,多余的东西去掉就能过编译

int main 我在视频里还没见过。唉..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-6 16:49:27 | 显示全部楼层
依然 发表于 2012-8-6 14:20
多余的东西?我用ait+F8矫正的格式啊。

 复制来的代码有时会多出一些空格,但又不是space,占2个位置的空格,是一种符号,编译器认不到的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-6 17:48:59 | 显示全部楼层
厉害啊我一个都没写出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-8 13:52:34 | 显示全部楼层
依然 发表于 2012-8-6 14:23
int main 我在视频里还没见过。唉..

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

本版积分规则

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

GMT+8, 2024-3-28 21:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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