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

Длинная арифметика - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Переменные http://www.cyberforum.ru/cpp-beginners/thread828022.html
system( "/*Как нибудь можно здесь использовать переменные типов STRING или CHAR?*/" );
C++ Русский язык в VS2010 Помогите сделать русский в с++, setlocale(LC_ALL,"Rus") не помогает http://www.cyberforum.ru/cpp-beginners/thread828017.html
Умножение элементов двумерного массива C++
x1=masH*masH*masH; b1=masH*masH*masH; c1=masH*masH*masH; x=masH*masH*masH; b=masH*masH*masH; c=(masH)*(masH)*(masH); Вот мой код на умножение элементов двумерного массива. Но при перемножении вместо нормального числа получается непонятно что.Этот код из программы под тегом.Я просто хочу найти определитель для матрицы 3 на 3.Чтобы потом получить обратную матрицу.Подскажите пожалуйста...
C++ В одномерном массиве, вычислить: а) количество элементов массива б) произведение элементов массива в) От - к +
Помогите пожалуйста!.. Вводить из клавиатуры массивы и обрабатывать их, пока на запрос “Хотите продолжать работу дальше (да, нет) ?” пользователь не ответит “нет”. Введены линейные массивы обрабатывать за заданными алгоритмами а), б) и в), какие оформить в виде подпрограмм (функций). В подпрограммах-функциях ни введения, ни выведения данных, не должно быть. Главная функция должна вводить данные...
C++ Информатика 9. Вывести на экран последовательность чисел, состоящую из нескольких строк http://www.cyberforum.ru/cpp-beginners/thread827994.html
Ввести натуральное число N (N < 10). Вывести на экран последовательность чисел, состоящую из нескольких строк. Последовательность формируется по заданной закономерности, например, при N = 4 1 2 3 4 8 7 6 5 9 10 11 12 16 15 14 13 Формирование и вывод одной строки оформить в виде процедуры. Добавлено через 12 минут Очень нужноинформатика 9
C++ Установка SDL Здравствуйте! В Visual Studio C++ 2005 устанавливаю библиотеку SDL. Выскакивает ошибка fatal error LNK1561: entry point must be defined. Я это пытался исправить, назначая в Project->project Properties->Configuration Properties->Linker->System->SubSystem системы Console и Windows, но тоже выскакивают ошибки: 1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced... подробнее

Показать сообщение отдельно
eocron
Кактус
 Аватар для eocron
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
04.04.2013, 16:22     Длинная арифметика
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
          
class BigInt
{
        static const int max_size = 100000;//количество десятичных разрядов, которые должно вмещать
        static const int osn = 10000;//Основание - {0,1,....,9999}
        
        int len_osn;//длинная в чарах нашего основания
        int dig_size;//истинный размер в интах = max_size/len_osn
        
        int *digits;//массив разрядов по основанию osn
public:
          int amount;//размер нашего числа по osn
          ....
};
          friend BigInt operator - (const BigInt &a, const BigInt &b)
          {
                 BigInt res = a;
                 int r = 0;
                 for (int i = 0;i<res.amount;i++)
                 {
                        res.digits[i] -= b.digits[i] + r;
                        if (res.digits[i]<0)
                        {
                                res.digits[i]+=osn;
                                res.digits[i+1]--;
                        }   
                 }
                 int pos = a.amount;
                 while (pos>0 && !res.digits[pos])
                 {
                        pos--;
                 }
                 res.amount = pos+1;
 
                 return res;
          }
Ну, думаю, весь код здесь ни к чему. Проблема в том, что когда я провожу операцию a-b, массив a (именно массив digits в a) портится (появляется мусор в конце, причем совершенно рандомный при каждом запуске), все остальные характеристики остаются верными. Не пойму почему. Помогите.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
          //Assignment    
          BigInt& operator = (const BigInt& other)
          {
                 if(this != &other)
                 {
                         memset(digits,0,sizeof(int)*dig_size);
                         amount = other.amount;
                         for(int i=0;i < other.amount;i++)
                         {
                                 digits[i] = other.digits[i];
                         }
                 }
                 return *this;
          }
Вот еще функция копирования
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru