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

Действия над многорозряднымии числами(очень длинными) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Anton1890
0 / 0 / 0
Регистрация: 27.03.2010
Сообщений: 25
22.09.2010, 12:52     Действия над многорозряднымии числами(очень длинными) #1
Помогите пожалуйста:
1. Задачи:
- Введение многоразрядного числа с клавиатуры.
- Выведение многоразрядного числа на экран.
- Сумма двух таких чисел.
- Реализация сравнения двух таких чисел (A=В, А<В, А>В, А=<В, А>=В).
- Умножения большого числа на короткое.
- Написать программу вычисления факториала N! при N>100.

P.S. Кто понимает украинский могу выложить часть лекции.
4.doc
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2010, 12:52     Действия над многорозряднымии числами(очень длинными)
Посмотрите здесь:

действия над матрицами C++
C++ Действия над матрицами
Действия над массивами C++
Работа с длинными числами C++
C++ Длинная арифметика. Класс работы с длинными числами.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LineStown
 Аватар для LineStown
63 / 63 / 3
Регистрация: 04.08.2010
Сообщений: 399
22.09.2010, 13:35     Действия над многорозряднымии числами(очень длинными) #2
В инсте была такая задача, всё сводится к использованию масива для хранения больших чисел поциферно.
Anton1890
0 / 0 / 0
Регистрация: 27.03.2010
Сообщений: 25
22.09.2010, 13:41  [ТС]     Действия над многорозряднымии числами(очень длинными) #3
Я знаю на счет массива,но можно пример кода или хотя бы ссылку.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
22.09.2010, 13:54     Действия над многорозряднымии числами(очень длинными) #4
Основываемся на представлении числа в виде массива.
Для факториала всё равно придётся реализовать произведение двух больших чисел. Сложение основывается на школьном алгоритме сложения столбиком. Вся сложность (относительная) - реализация перенесения разряда при его переполнении. Умножение так же реализуется столбиком, на основе уже реализованного сложения. Ну а факториал банально реализуется на основе уже написанного умножения (только не в коем случае не рекурсия - только цикл).
Для сравнения A и B сначала проверяем количество разрядов у каждого из них. Если у одного разрядов больше, чем у другого, то оно заведомо больше. Если количество разрядов равно, сравниваем числа поразрядно, начиная со старшего разряда. Если у A старший разряд больше, чем у B, то A соответственно больше B. Если старшие разряды равны, переходим на разряд младше на порядок. И т.д. Работает в обе стороны. Возвращать в зависимости от результатов проверки -1, 0, 1 (меньше, равны, больше).

Добавлено через 44 секунды
На счёт ссылки - ищите в гугле "Длинная арифметика"
Anton1890
0 / 0 / 0
Регистрация: 27.03.2010
Сообщений: 25
22.09.2010, 13:56  [ТС]     Действия над многорозряднымии числами(очень длинными) #5
В теории я это как понимаю,но мне желательно практический пример - программу,если можно.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
22.09.2010, 14:00     Действия над многорозряднымии числами(очень длинными) #6
Anton1890, почитайте http://www.cyberforum.ru/cpp-beginne...ead153284.html
Может натолкнет Вас на мысли.
Anton1890
0 / 0 / 0
Регистрация: 27.03.2010
Сообщений: 25
22.09.2010, 14:09  [ТС]     Действия над многорозряднымии числами(очень длинными) #7
Спасибо за ссылку но боюсь в таком виде препод вообще не поймет и не поверит что я задание сам сделал.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
22.09.2010, 14:19     Действия над многорозряднымии числами(очень длинными) #8
сложение и вычитание

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
void sub(int *f, int *s, int size){
    for (int i = 0; i < size; ++i){
        if (f[i] >= s[i])
            f[i] -= s[i];
        else{
            --f[i+1];
            f[i] +=  (10 - s[i]);
        }
        std::cout<<f[i];
    }
}
 
void add(int *f, int *s, int size){
    const int SS = 10;
    int ost = 0;
    for (int i = 0; i < size; ++i){
        f[i] = (s[i] + f[i] + ost);
        ost = 0;
        if (f[i] >= SS){
            ost = f[i] / 10;
            f[i] %= 10;
        }
        std::cout << f[i];
    }
}
Добавлено через 4 минуты
12345 + 789
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const int SIZE = 20;
 
 
int main(){
    int first[SIZE] = {5,4,3,2,1};
    int second[SIZE] = {9,8,7};
 
    std::cout << "First number:   ";
    std::cout << std::endl << "Second number:  ";
    std::cout << std::endl << std::endl << "Result number:  ";
    add(first,second,SIZE);
 
 
    return 0;
}
числа в массиве записаны в обратном порядке
Disa
 Аватар для Disa
1 / 1 / 0
Регистрация: 30.11.2009
Сообщений: 88
29.11.2010, 00:54     Действия над многорозряднымии числами(очень длинными) #9
Цитата Сообщение от PointsEqual Посмотреть сообщение
std::cout<<f[i];
можете дать расширенный комментарий по поводу этой строки, пожалуйста?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2010, 09:50     Действия над многорозряднымии числами(очень длинными)
Еще ссылки по теме:

C++ Операции с длинными числами - неправильно выводится результат
C++ Функция с++ (работа с длинными числами - вывод результата в файл)
Арифметические действия над числами C++

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

Или воспользуйтесь поиском по форуму:
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
29.11.2010, 09:50     Действия над многорозряднымии числами(очень длинными) #10
Цитата Сообщение от Disa Посмотреть сообщение
можете дать расширенный комментарий по поводу этой строки, пожалуйста?
вывести на экран цифру числа, (элемент массива)
Yandex
Объявления
29.11.2010, 09:50     Действия над многорозряднымии числами(очень длинными)
Ответ Создать тему
Опции темы

Текущее время: 01:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru