0

数値が完全な二乗でない場合は false を返し、それ以外の場合はルートを返します。しかし、このコードでは常にルートを返します。例: 入力 5、ルート 2。

main()
{

int i;
int number=0;
int result=0;

for(i=0; i<10; i++){
    printf("Testing:");
    scanf("%i",&number);


    result = isSquare(number);

    if(result==0)
        printf("Fail\n");
    else
        printf("%i\n",result);

}
}


int isSquare(int n)
{
float root = sqrt(n);
if (n == (int) n)
    return root;

else
    return 0;

}
4

2 に答える 2

2

それ以外の:

if (n == (int) n) // n is an integer (not necessarily a perfect square)

あなたが意味したのは:

if (root == (int) root) // root is an integer (so n is a perfect square)
于 2012-11-18T23:46:38.070 に答える
1

こんな感じじゃないの?

int isSquare(int n)
{
float root = sqrt(n);
if (n == ((int) root)*((int) root)) //Better use floor() function
    return root;
else
    return 0;
}
于 2012-11-18T23:48:35.520 に答える