Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [С++] Получения числа из под корня 
:(
    Опции темы
Scrolly
Дата 26.6.2007, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 16.3.2006

Репутация: нет
Всего: нет



Во входном файле задано длинное число до 1000 знаков, требуется посчитать корень N степени (ближайшее целое, не превосходящее).
Формат входных данных


В первой строке входного файла содержится число из которого требуется извлечь корень, далее число N<=2000.
Формат выходных данных

Выведите требуемый корень
Пример(ы) входных данных

16783
4
Пример(ы) выходных данных

11
--------------------------------------------------------------------
 Прошу помочь с решением задачи.
PM MAIL ICQ   Вверх
AndrRus
Дата 26.6.2007, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 14.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



File 1 - Main.cpp
Код

#include <fstream>
#include <iostream>
#include <cmath>

using namespace std;

int main () {
    long double b, a, result;
    fstream first, second;

    first.open ("Input.txt", ios::in);
    if (!first) {
        cout << "Error of open file" << endl;
        return 1;
    }

    first >> a >> b;
    if (!a || !b) {
        cout << "Not correct value" << endl;
        return 2;
    }

    first.close ();
    if (first.fail ()) {
        cout << "Error of close" << endl;
        return 3;
    }

    if (b > 2000 || b > a || b < 0) {
        cout << "Not corrext value" << endl;
        return 4;
    }

    second.open ("Output.txt", ios::out);
    if (!first) {
        cout << "Error of open file" << endl;
        return 5;
    }
    
    result = pow (a, pow (b, -1));
    second << ceil (result);

    second.close ();
    if (second.fail ()) {
        cout << "Error of close" << endl;
        return 3;
    }

    return 0;
}


Input.txt
Код

167832345746355756735263575685745764564564772725724676436164361574
4


Output.txt
Код

2.02404e+016

PM MAIL ICQ   Вверх
Scrolly
Дата 27.6.2007, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 16.3.2006

Репутация: нет
Всего: нет



 smile  мда... то ли задание не полностью понял или я чего от не понимаю, ведь long double включает в себя около 37 значещих цифр, а там их количество 1000!!! думаю простыми типами здесь не обойтись, да и станартная функция врядли правильно высчитывает такие огромные знаения. Если чего не правильно говорю, то поправьте пожалуйста)) 
PM MAIL ICQ   Вверх
Solomon
Дата 28.6.2007, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: 2
Всего: 2



Ну да 1000 знаков это жестко.. а можно узнать зачем нужно такое большое число.. ты хоть представляеш какое это получится число??? Я думаю сдесь чет неправильно автор вопроса выразился или я шоке как и 
Scrolly,  ))

Добавлено через 58 секунд
Хотя дальше если я правильно понял автор пишет что число <2000... или это максимальная степень корня?


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
Scrolly
Дата 28.6.2007, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 16.3.2006

Репутация: нет
Всего: нет



2000 это степень корня)) вообщем жесть)) знаков в числе из которого надо взять корень и в правду 1000 .. smile 
Ну вообщем, кто нибудб может помочь... 
PM MAIL ICQ   Вверх
AndrRus
Дата 29.6.2007, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 14.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Можно записать это астрономическое число в массив, после чего округлить значение и представить его как произведение некой выделенной части на 10 в степени. То есть представить число в виде 274345 * 10^56. Извлекаем отдельно корень из числа и из степени числа десяти. Погрешность относительно единиц будет естественно существенная, но относительно самого числа терпимой.

Это сообщение отредактировал(а) AndrRus - 29.6.2007, 12:25
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0961 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.