0 / 0 / 0
Регистрация: 11.04.2018
Сообщений: 28
|
||||||
1 | ||||||
Нахождение корня n-ой степени30.08.2019, 19:35. Показов 3958. Ответов 9
Метки нет (Все метки)
Задача про нахождение корня n-ой степени из числа а.
Метод - деление отрезка пополам, метод в других применяю, тут какой-то ступор.... Что не так?
0
|
30.08.2019, 19:35 | |
Ответы с готовыми решениями:
9
Функция корня степени Вычисление корня n-ой степени Извлечение корня n-степени Рекурсия: вычисление корня n-ой степени |
Модератор
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,716
|
||||||
30.08.2019, 19:40 | 2 | |||||
Попробуйте такую функцию:
0
|
170 / 122 / 61
Регистрация: 06.02.2015
Сообщений: 300
|
|
30.08.2019, 19:43 | 3 |
Программа корректно отработает если a=-4, n=2 ?
0
|
0 / 0 / 0
Регистрация: 11.04.2018
Сообщений: 28
|
|
31.08.2019, 07:47 [ТС] | 4 |
A от 0 до 1000
Добавлено через 6 минут Вот это вариант с заменой pow и учетом чисел меньше 1, но не проходит тест 18 и 30 - это значит , что недостаточная точность ответа - т.е. при вводе а=2, n=2, ответ 1,41421, а должно быть 1.41421356237 Куда смотреть? #include <iostream> #include <string> #include <cmath> using namespace std; const double e= 1e-15; double po(double x, int n){ __if (n == 1) return x; __else{ ____double now = x; ____for (int i = 0; i < n - 1; i++){ ______now *= x; ____} ____return now; __} } int main() { __double a; __int n; __cin >> a; __cin>> n; __double y,x,x1=0, x2=a * a; __if (a==0) {cout << 0;} __else if (n == 0) {cout << 1;} __else if (n == 1) {cout << a;} __else{ ____if (a<1) x2=1; ____while (fabs(y-a) > e) ____{ ______ x=(x2+x1)/2; ______ y=po(x,n); ______ if(y-a>0) x2=x; ______ else x1=x; ____} ____cout << x; __} }
0
|
170 / 122 / 61
Регистрация: 06.02.2015
Сообщений: 300
|
||||||
31.08.2019, 08:39 | 5 | |||||
0
|
0 / 0 / 0
Регистрация: 11.04.2018
Сообщений: 28
|
||||||
31.08.2019, 09:01 [ТС] | 6 | |||||
Спасибо. Может что-то недопонял, но теперь ответы все ОК, но говорит превышено время работы....
0
|
170 / 122 / 61
Регистрация: 06.02.2015
Сообщений: 300
|
|
31.08.2019, 09:13 | 7 |
1. y=0 в main при инициализации
2. const double e = 1e-15 измените например на const double e = 1e-10 может поможет
0
|
0 / 0 / 0
Регистрация: 11.04.2018
Сообщений: 28
|
||||||
31.08.2019, 09:34 [ТС] | 8 | |||||
Выдает неправильный ответ на тест 30
0
|
170 / 122 / 61
Регистрация: 06.02.2015
Сообщений: 300
|
|
31.08.2019, 09:36 | 9 |
тест, что ли приведите ?
0
|
0 / 0 / 0
Регистрация: 11.04.2018
Сообщений: 28
|
|
31.08.2019, 09:47 [ТС] | 10 |
Эта ошибка говорит вот о чем.
Вам просто не хватило точности. Даже если бы хватило, задачу нельзя считать решенной правильно, так как метод деления пополам реализован не во всех ветках.
0
|
31.08.2019, 09:47 | |
31.08.2019, 09:47 | |
Помогаю со студенческими работами здесь
10
Вычисление корня заданной степени Рекурсивное вычисление корня k-й степени Извлечение корня н-ной степени из числа Вычисление корня n-й степени по итерационной формуле Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |