Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Корень квадратный (http://forum.oszone.net/showthread.php?t=220779)

Prof 17-11-2011 17:49 1797336

Корень квадратный
 
Ребята, как на С++ за 2 секунды можно найти корень квадратный из 10^3000?

Hector 17-11-2011 17:54 1797346

pow(pow(10,3000),0.5)

Tonny_Bennet 17-11-2011 23:19 1797582

Math.Sqrt(10e30);

ferget 18-11-2011 03:02 1797677

Цитата:

Цитата Hector
pow(pow(10,3000),0.5) »

в таком виде даже не компилируется, надо указывать тип чисел
и даже если указать выводит 1.#INF, pow(10,3000) не влазит даже в long double, надо использовать класс SuperLong

yurfed 18-11-2011 03:15 1797681

Любую степень корня вычисляем по схеме ( напримр: кубический корень из 6) = 6^(1/3) = 1.8171...
Квадратный - 6^(1/2)
Короче, под это подходит любая степень корня.
А цифры в уравнение подставит и Буратинко, деревянный человечек :)
Надеюсь понятно выразился :)

Prof 20-11-2011 16:07 1799289

Это понятно. Стоит задача такого плана:

Условие:
Для заданного натурального числа А нужно найти наибольшее число В такое, что B2 ≤ A.

Входящие данные:
Во входящем файле записано натуральное число A (A ≤ 103000).

Исходящие данные:
В исходящий файл выведите максимальное натуральное число B, квадрат которого не превышает A. Число B следует выводить без лидирующих нулей.

А идея была такой: имеем мы например число 385. Делим его пополам (без остачи), получаем 192. 1922 > 385. Делим, 192/2 = 96, 962 > 385. Делим 96/2 и так дальше.

Tonny_Bennet 22-11-2011 11:14 1800563

Т.е. у вас есть 2 числа А и В. И нужно зная число А вывести число В, квадрат которого равен (или почти равен т.к. В должно быть натуральным) числу А.

А почему бы просто не взять корень из числа А каким бы оно ни было и просто отбросить дробную часть. Получим число В.

Или я что-то недопонимаю ???

Prof 22-11-2011 22:32 1801163

Ну а во что его запихнуть? ни в какой long long не влезет...

Tonny_Bennet 24-11-2011 12:09 1802274

В C# точно есть тип double думаю в С++ есть тоже.

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

пусть 111111111111111222222222222222

Затем брать половину строки (но не больше 15 чисел) и ставить десятичную точку

111111111111111.222222222222222e15

А дальше отдельно брать корень из степени 10 и корень из самого числа.


P.S. Точность double 324 знака до запятой и 15 после запятой.

yurfed 24-11-2011 13:25 1802343

Цитата:

Цитата Tonny_Bennet
А дальше отдельно брать корень из степени 10 и корень из самого числа. »

Не мудрите. Пользуйтесь логарифмами и экспонентами :)

cmath (math.h)

Tonny_Bennet 24-11-2011 18:26 1802582

Цитата:

Цитата yurfed
Не мудрите. Пользуйтесь логарифмами и экспонентами
cmath (math.h) »

Точно!!!

Как же развращают (в хорошем смысле этого слова) языки программирования типа С.

Вот помнится на паскале возводили в степень и корни брали через экспоненту и логарифм... а щас... эх...


Время: 18:22.

Время: 18:22.
© OSzone.net 2001-