lcm_zg
TZMLAY
采纳率90%
2016-04-08 14:32 阅读 1.3k
已采纳

C语言简单程序调试问题

这是源码:

#include
#include

int main()
{
double x,y,z,i;
for(x = 1;x<100000;x++)
{

y = sqrt(x+100);

z = sqrt(x+268);

if((y*y == x+100)&&(z*z == x+268))
{
printf("%lf\n",x);
}
}

return 0;

}

不知道问题出在哪里?麻烦解答一下。
另,为什么知道设定的数值范围是1-10万,这个是不一定的?
再另,表示对for里面的不太理解

PS,题目:一个整数,它加上100后是一个完全平方数,
再加上168又是一个完全平方数,请问该数是多少?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    caozhy 从今以后生命中的每一秒都属于我爱的人 2016-04-08 15:22
     #include<stdio.h>
    #include<math.h> 
    
    int main()
    {
        int x = 0;
        while (true)
        {
            if (((int)sqrt(x + 100) * (int)sqrt(x + 100) == x + 100)
                && ((int)sqrt(x + 168) * (int)sqrt(x + 168) == x + 168))
            {
                printf("%d\n", x);
                break;
            }
            x++;
        }
        return 0;   
    } 
    
    点赞 1 评论 复制链接分享
  • qq_31989405 qq_31989405 2016-04-08 16:30

    #include
    #include

    int main()
    {
    double y,z,i;//int 型
    for(int x = 1;x<100000;x++) //100000是让这个数尽量大
    {
    y = sqrt(x+100);//开平方后不一定是整数,可能是小数
    z = sqrt(x+268);

    if((y*y == x+100&&z*z == x+268))//如果满足这两个条件,说明y,z是整数,也就是说x+100和x+268是完全平方数
    {
    printf("%lf\n",x);
    }
    }

    return 0;

    }

    点赞 评论 复制链接分享
  • herozhangbz herozhangbz 2016-04-08 23:49

    你的y,z应该是整数,你是for里面的循环代码看不懂么?如果一个数+100或者168取平方根是整数那么这个数才是完全平方数。所以你得保证你的y,z是整数类型,如果这个数不是完全平方数,那么取平方根的时候会做精度取舍,你再平方就不会等于这个数加上100或者268,相当于检验的目的,当然这个检验的前提也是yz是整型

    点赞 评论 复制链接分享

相关推荐