2015-10-01 8 views
-3

Как определить, является ли число квадратным или нет на языке C? Например, чтобы найти квадратный корень из любого положительного целого числа, мы используем функцию sqrt() на языке C, которая написана в файле заголовка <math.h>.Как определить, является ли число квадратным числом или нет в C?

Предположим, что мы должны найти квадратный корень из натурального x. Программа будет на языке C.

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

int main() 
{ 
    int x; 
    double sq; 

    scanf("%d", &x);  
    sq = sqrt(x);  
    printf("%0.2f\n", sq); 

    return 0; 
} 

Нравится программа? Поделись с друзьями!

+6

Вы хотите проверить результат 'sqrt'? Пожалуйста, уточните свой вопрос. Какое число «число»? – Downvoter

+0

Число может быть любым положительным целым числом, таким как 1,2,3,4,100,34, ..... и программа определит, является ли число квадратным числом или нет. и я дал программе найти значение квадратного корня числа в качестве примера того, что мы используем функцию sqrt, чтобы найти значение квадратного корня любого числа, но что мы будем использовать, если мы хотим найти, является ли число квадратным числом или нет? –

+0

Вы попробовали 'if (x == (int) sq * (int) sq)'? – mch

ответ

1

После того, как у вас есть квадратный корень, нарисуйте результат на int, который усекает любой дробный компонент. Затем умножьте это число на себя и проверьте, совпадает ли он с исходным номером.

int x = // some nonnegative number 
double sq = sqrt(x); 
int sq_int = (int)sq; 
if (sq_int * sq_int == x) { 
    print("%d is a square\n", x); 
} else { 
    print("%d is not a square\n", x); 
} 

Например, если x 9, то sq составляет 3,0. Таким образом, sq_int установлено в 3, и поскольку 3 * 3 == 9 истинно, он печатает 9 is a square.

Если x 10, то это sq 3,162277 .... Так sq_int установлен на 3 (так как дробная часть усечена), а так как 3 * 3 == 10 является ложным, он печатает 10 is not a square.

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

int main(void) 
{ 
    double x; 

    double sq; 

    scanf("%lf",&x); 

    sq = sqrt(x); 

    if(sq == (int)sq) 
     printf("sq is a root\n"); 
    else 
     printf("sq is not a root\n"); 

    return 0; 
} 
+1

Что произойдет, если 'sq' является, например,' 703.00000000000001', приведение в int возвращает '703' и неявное преобразование в двойные возвращает' 703.000000000000001' (один '0' больше)? – mch

+0

Ваш аргумент был бы более убедительным, если бы вы использовали примеры, которые были квадратным корнем из целого числа. – TecBrat

+0

Я проверил первые 100000000 квадратных корней для серии из четырех нулей после десятичной дроби и нашел около 5000 из них. Я сделал это снова для серии из 5 нулей и не нашел ни одного. Таким образом, это безопасно использовать для чисел в пределах 1-100000000, по крайней мере. – TecBrat

Смежные вопросы