2 lcm zg lcm_zg 于 2016.04.08 22:32 提问

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
caozhy   Ds   Rxr 2016.04.08 23: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;   
} 
caozhy
caozhy 回复TZMLAY: 你的程序根本就不对。
一年多之前 回复
lcm_zg
lcm_zg 请问我贴出来的程序哪里错?
一年多之前 回复
qq_31989405
qq_31989405   2016.04.09 00: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.09 07:49

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!