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

Длинная арифметика. Сложение - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Генерация случайных чисел http://www.cyberforum.ru/cpp-beginners/thread1113574.html
Здравствуйте, появилась такая проблема: при генерации случайного числа функцией rand(); мне нужно сгенерировать 5 случайных чисел, но они все одинаковые, если написать вот так: srand(time(NULL)); то числа будут меняться только при перезапуске, но всё равно все будут одинаковые
C++ Вывод результата поиска Программа считывает из файла данные, потом осуществляет поиск по Id - номеру и должна вывести строку с Id, именем, фамилией и пр., но в итоге выводит только строку, в которой есть Id, а остальных данных нет. Не пойму в чем дело, очень прошу помочь. #include <stdlib.h> // (exit) #include <string.h> #include <iostream> // (cout, cin) #include <fstream> //работа с фаилами #include... http://www.cyberforum.ru/cpp-beginners/thread1113567.html
Считать данные из файла в буферную переменную C++
На форуме советуют не возиться с потоками данных файла, т.к. намного эффективнее считать сразу весь файл в буферную переменную. Собственно, что это значит, и как это реализовать? Приведите пример, если можно.
C++ R6025 pure virtual function call при вызове метода, реализованного в дочернем классе
Всем привет. Вот такая ошибка у меня возникает при вызове метода, который реализован в дочернем классе, но потом он почему-то становится нереализованным. Проблема заключается, как я полагаю в приведении типов, но как ее избежать. void AbstractTask::start() { CreateThread(NULL, 0, StaticThreadStart, (void*) this, 0, &myThreadId); } DWORD WINAPI AbstractTask::StaticThreadStart(void*...
C++ Алгоритм бензовозов http://www.cyberforum.ru/cpp-beginners/thread1113538.html
Могли бы вы подсказать, как оптимально реализовать алгоритм? Никак не могу придумать (( Отправка бензовозов Исходные данные: Есть АЗС с резервуарами разной емкости и разными видами топлива (92,95, ДТ). Есть бензовоз с разными отсеками и с разными видами топлива. Бензовоз может сливать все отсеки в один резервуар, может слить несколько отсеков в один резервуар, а несколько в других, может...
C++ If - *массив ( у кого есть время ) #include <stdio.h> #include <conio.h> #include<iostream> #include "windows.h" using namespace std; int main() { int **a,n; cout<<"Vvedite n: "; подробнее

Показать сообщение отдельно
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,056
08.03.2014, 00:34     Длинная арифметика. Сложение
не знаю насчет быстрее но меньше кода это точно
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
BigInt BigInt::operator+(const BigInt& rhs) const
{
  if (!(m_length*rhs.m_length ))
        throw "Empty number in BigInt::operator+";
  BigInt result;
   BigInt *tmp,*tmp1;
  if (m_length<rhs.m_length)
    {
     tmp=&rhs
     tmp1=this;
    }
    else
    {
     tmp1=&rhs
     tmp=this ;
    }
   result.m_integer = new uint32[tmp->m_length ];
   result.m_length = tmp->m_length ;
   memset(result.m_integer, 0x0, (tmp->m_length ) * sizeof(uint32));
   memcpy(result.m_integer, tmp->m_integer,(m_length ) * sizeof(uint32));
 bool flag=false;  
 for (uint32 i = 0; i <tmp1-> m_length; ++i)
   {
     result.m_integer[i] +=tmp1->m_integer[i];
       if (result.m_integer[i] < tmp1->m_integer[i])
         {
           if( i < m_length-1 && tmp-> m_length!=tmp1-> m_length )
             ++result.m_integer[i + 1];
           else
              flag= true;
          }
    } 
if(flag)
 {
  uint32 * addr1= new uint32[result.m_length +1];
   memcpy(addr,result.m_integer,(result.m_length +1) * sizeof(uint32));
  addr1[result.m_length++]=1;
  delete [] result.m_integer;
  result.m_integer=addr1; 
  }
 return result;
}
писал прямо здесь
проверь на ошибки
но идея надеюсь понятна
выделяем памяти под больший размер ( если одинаковы то без разницы)
потом копируем в результат большее число
потом в цикле прибавляем меньшее
если на последней итерации переполнение и размеры равны
то перераспределяем память ( увеличиваем на 1)
копируем значение а в старший разряд записываем 1

Добавлено через 1 минуту
Цитата Сообщение от vlad_light Посмотреть сообщение
if (m_length == rhs.m_length)
* * { * * *
* * * * result.m_integer = new uint32[m_length + 1];
вот здесь у тебя косячек
если размеры равны но там записана 1
т.е в каждом размер m_length =1
то при сложении переполнения не будет
но памяти ты выделишь уже 2
 
Текущее время: 16:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru