Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Pjeroo
Землянин
34 / 34 / 12
Регистрация: 15.01.2013
Сообщений: 313
#1

Вывести последовательность из цифр огромного числа - C++

11.09.2013, 13:16. Просмотров 318. Ответов 4
Метки нет (Все метки)

Задание во вложении.

Собственно код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <math.h>
 
using namespace std;
double factorial(int to);
double exponential(int to, int basis);
 
int main()
{
    int i=1;
    double mantiss, whole;
 
    double toOutput = exponential(40, 2);
    
    cout << toOutput << '\n';
 
    while(true)
        {
            toOutput = toOutput / 10;
            mantiss = modf(toOutput, &whole);
            cout << (mantiss * 10) << '\n';
            toOutput = toOutput - mantiss;
            if(toOutput<1)
                break;
            i++;
        }
    cout << '\n' << i << '\n';
    return 0;
}
double factorial(int to)
{
    double factor = 1;
    for (int i = 1; i <= to; i++)
    {
        factor = factor * i;
    }
    return factor;
}
 
double exponential(int to, int basis)
{
    double expon = 1;
    for (int i = 1; i <= to; i++)
    {
        expon *= basis;
    }
    return expon;
}
Работает правильно только до 12 знака, затем идут помехи погрешности, вместо 7 - 7.0001, вместо 6 - 6.00006. Знаю, что это из-за особенности хранения чисел с плавающей точкой, но как можно сделать по другому, чтобы было точно?
В коде там считается 2^40 и уже есть погрешность, а по заданию надо 100! - 2^100, а это ~9 * 10^157, там только 16 значащих цифр отображается, а остальное заполняется нулями. Что делать?
Миниатюры
Вывести последовательность из цифр огромного числа  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2013, 13:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывести последовательность из цифр огромного числа (C++):

Дана последовательность n натуральных чисел. Для каждого числа вычислить количество его цифр и сумму этих цифр. Вывести на экран каждое число, количес - C++
Дана последовательность n натуральных чисел. Для каждого числа вычислить количество его цифр и сумму этих цифр. Вывести на экран каждое...

Дана последовательность, элементы которой есть целые двузначные числа. Упорядочить последовательность по убыванию произведений цифр - C++
Здравствуйте. На форуме есть код подобный, но по возрастанию сумм элементов. Как мне подправить код, чтобы было &quot;по убыванию произведений...

Дано натуральное число N. Найти и вывести все числа в интервале от 1 до N-1, у которых произведение цифр совпадает с произведением цифр данного числа - C++
Помогите, пожалуйста!!! А то у меня не получается( Написал программу, когда ввожу число 32 как в примере выводит только 16, а 6 и 23 не...

Вводится последовательность из N целых чисел. Найти среднее арифметическое его цифр (функцией оформить определения среднего арифметического цифр числа - C++
Вводится последовательность из N целых чисел. Найти среднее арифметическое его цифр (функцией оформить определения среднего арифметического...

Получить последовательность десятичных цифр числа - C++
Ребята, помогите решить программу! Получить последовательность десятичных цифр числа 100! (n!=1*2*...*n).

Тип для хранения огромного числа. - C++
Нужно хранить огромное число целого типа.Что-то около 17-24 цифр. Подойдёт ли int 64?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
XRuZzz
Антикодер
672 / 573 / 28
Регистрация: 15.09.2012
Сообщений: 2,521
11.09.2013, 13:21 #2
использовать только целые числа
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,368
11.09.2013, 13:23 #3
Используй длинную арифметику (гугл в помощь), например GMP или что-нибудь аналогичное.
XRuZzz
Антикодер
672 / 573 / 28
Регистрация: 15.09.2012
Сообщений: 2,521
11.09.2013, 13:57 #4
по моему лучше для начала написать класс BigIntegers

Добавлено через 12 минут
вот кстати то что сходу удалось найти Спроектировать и реализовать класс BigInt

Добавлено через 4 минуты
а по фаулеру лучше сначала написать unit test а потом писать сам класс
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
11.09.2013, 14:48 #5
Еще можно посмотреть в сторону Boost.Multiprecision. Пример для факториала :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
 
namespace mp = boost::multiprecision;
 
mp::cpp_int fact(unsigned n)
{
   mp::cpp_int res = 1;
   for (unsigned i = 2; i <= n; ++i)
      res *= i;
   return res;
}
 
int main()
{
   std::cout << "5!   = " << fact(5) << std::endl;
   std::cout << "100! = " << fact(100) << std::endl;
   std::cout << "1000! = " << fact(1000) << std::endl;
 
   std::cout<<'\n';
   return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2013, 14:48
Привет! Вот еще темы с ответами:

Последовательность десятичных цифр числа 2 в степени 100 - C++
Возникла проблемка с выводом последовательности.Мне нужно получить последовательность десятичных цифр числа 2 в степени 100. Сначала...

Является ли последовательность цифр числа упорядоченной по возрастанию или по убыванию? - C++
Пользователь вводит положительное число. Определить является ли последовательность его цифр упорядоченной по возрастанию и является ли...

Определить, есть ли в записи натурального числа n последовательность из k одинаковых цифр - C++
Выяснить, есть ли в записи натурального числа n последовательность из k одинаковых цифр

Упорядочить последовательность по не возрастанию суммы цифр , входящих в запись числа - C++
Упорядочить последовательность по не возрастанию суммы цифр , входящих в запись числа


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.09.2013, 14:48
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru