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

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

Войти
Регистрация
Восстановить пароль
 
Wahlberg
70 / 70 / 2
Регистрация: 26.11.2010
Сообщений: 371
#1

Как сделать свою переменну в С++ - C++

01.07.2011, 00:33. Просмотров 815. Ответов 10
Метки нет (Все метки)

Мне нужно подсчитывать очень большие числа, порядка 10^100000, и нужно создать свою переменную как можно это сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2011, 00:33     Как сделать свою переменну в С++
Посмотрите здесь:

как сделать свою кнопку - C++
для курсового проекта мне нужно внедрить браузер в форму и сделать пару кнопок(типа вперед,назад) чтобы все работало,это я сделал с помощью...

Как сделать свою формат-функцию? - C++
навроде void logtofile(const char * _Format, ...) { FILE * pFile; pFile = fopen ("log.txt","a"); fprintf (pFile,...

Как сделать свою операционную систему не используя ассемблер - C++
Скажите, можно ли сделать ОС на c++ СОВСЕМ без использования ассемблера. Если можно, то как. Дайте какие-нибудь статьи. Я не собираюсь её...

сделать свою Beep() - C++
собственно как она реализуется ? может кто знает?

Хочу попробовать сделать свою регистрацию - C++
Хочу сделать небольшую програмку, в ней будет регистрация, потом ввод логина пароля и когда в неё заходишь, будет просто какая нибудь...

Хочу сделать свою 3D игру (работа с текстурами и 3D моделями) - C++
Я хочу сделать свою 3D игру. Жанр: online RPG с элементами survival. То есть там можно будет крафтить, строить, и будут какие-нибудь...

Как создать свою библиотеку? - C++
Как создать свою библиотеку со своими функциями и включить ее в основную программу?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Koste
26 / 26 / 0
Регистрация: 04.03.2011
Сообщений: 164
01.07.2011, 00:39     Как сделать свою переменну в С++ #2
Библиотеки больших чисел, не катят?
студентик
0 / 0 / 0
Регистрация: 11.04.2011
Сообщений: 13
01.07.2011, 01:37     Как сделать свою переменну в С++ #3
попробуй записать данное число используя динамические структуры данных.
Напр: стеки, очереди.
Данное число можешь записывать в стек разбивая его на разряды.
А по переменной ничем не помогу.
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
01.07.2011, 01:43     Как сделать свою переменну в С++ #4
тут нужно использовать длинную арифметику... или Big Integer library of Boost

Добавлено через 5 минут
студентик, сомневаюсь, что Ваш вариант работы с большими числами будет удачен и производителен ( не видел реализации, и не пробовал таким методом ) и будет ли он вообще работать, если говорить о большем, чем хранении большого числа в памяти - умножение больших чисел, сложение, деление etc...
sandye51
программист С++
682 / 584 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
01.07.2011, 01:54     Как сделать свою переменну в С++ #5
Mиxaил, будет, а почему нет-то.
обычно так и делают вообще-то
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.07.2011, 02:26     Как сделать свою переменну в С++ #6
Цитата Сообщение от sandye51 Посмотреть сообщение
обычно так и делают вообще-то
делают, но через структуры данных с произвольным доступом, а не

Цитата Сообщение от студентик Посмотреть сообщение
стеки, очереди.
Wahlberg
70 / 70 / 2
Регистрация: 26.11.2010
Сообщений: 371
01.07.2011, 21:13  [ТС]     Как сделать свою переменну в С++ #7
Ну как сделать-то?)(
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.07.2011, 21:19     Как сделать свою переменну в С++ #8

Не по теме:

Ради таких случаев я освоил это =)

Java
1
2
3
4
Scanner i = new Scanner(new File("input.txt"));
PrintWriter o = new PrintWriter(new File("output.txt"));
java.math.BigInteger a = i.nextBigInteger(), b = i.nextBigInteger();
o.print(a.multiply(b));


Либо использовать буст
Или вот, как вариант.
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
01.07.2011, 22:56     Как сделать свою переменну в С++ #9
Или вот я попробовал сегодня GMP.
dimon1984
40 / 38 / 0
Регистрация: 22.01.2011
Сообщений: 670
02.07.2011, 13:34     Как сделать свою переменну в С++ #10
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
#include <iostream>
#include <string.h>            //для strlen()и т. п.
#include <stdlib.h>            //для ltoa()
using namespace std;
 
const int SZ = 1000;           //максимальное число разрядов
 
class verylong
  {
  private:
    char vlstr[SZ];            //число как строка
    int vlen;                  //длина строки verylong
    verylong multdigit(const int) const; //прототипы
    verylong mult10(const verylong) const;// скрытых
                                          // функций
  public:
    verylong() : vlen(0)       //конструктор без аргументов
      { vlstr[0]='\0'; }
    verylong(const char s[SZ]) //конструктор (1 аргумент)
      { strcpy(vlstr, s); vlen=strlen(s); } //для строки
    verylong(const unsigned long n) //конструктор (1 арг.)
      {                             //для long int
      ltoa(n, vlstr, 10);           //перевести в строку
      strrev(vlstr);                //перевернуть ее
      vlen=strlen(vlstr);           //найти длину
      } 
    void putvl() const;              //вывести число
    void getvl();       //получить число от пользователя
    verylong operator + (const verylong); //сложить числа
    verylong operator * (const verylong); //умножить
  };
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include "verylong.h"        //заголовочный файл для verylong
//---------------------------------------------------------
void verylong::putvl() const //вывод на экран verylong
  {
  char temp[SZ];
  strcpy(temp,vlstr);        //создать копию
  cout << strrev(temp);      //перевернуть копию
  }                          //и вывести ее
//---------------------------------------------------------
void verylong::getvl()       //получить сверхбольшое число от
                             //пользователя
  {
  cin >> vlstr;              //получить строку от пользователя
  vlen = strlen(vlstr);      //найти ее длину
  strrev(vlstr);             //перевернуть ее
  }
//---------------------------------------------------------
verylong verylong::operator + (const verylong v)
                             //сложение
  {
  char temp[SZ];
  int j;
                             //найти самое длинное число
  int maxlen = (vlen > v.vlen) ? vlen : v.vlen;
  int carry = 0;             //установить в 1, если сумма >= 10
  for(j = 0; j<maxlen; j++)  //и так для каждой позиции
    {
    int d1 = (j > vlen-1)  ? 0 : vlstr[j]-'0';    //получить
                                                  //разряд
    int d2 = (j > v.vlen-1) ? 0 : v.vlstr[j]-'0'; //и еще
    int digitsum = d1 + d2 + carry;  //сложить разряды
    if( digitsum >= 10 )             //если перенос, то
      { digitsum -= 10; carry=1; }   //увеличить сумму на 10
    else                     //установить перенос в 1
      carry = 0;             //иначе перенос = 0
    temp[j] = digitsum+'0';  //вставить символ в строку
    }
  if(carry==1)               //если перенос в конце,
    temp[j++] = '1';         //последняя цифра = 1
  temp[j] = '\0';            //поставить ограничитель строки
  return verylong(temp);     //вернуть временный verylong
  }
//---------------------------------------------------------
verylong verylong::operator * (const verylong v)//умножение
  {                                             //сверхбольших чисел
  verylong pprod;            //произведение одного разряда
  verylong tempsum;          //текущая сумма
  for(int j=0; j<v.vlen; j++)//для каждого разряда аргумента
    {
    int digit = v.vlstr[j]-'0'; //получить разряд
    pprod = multdigit(digit);   //умножить текущий на него
    for(int k=0; k<j; k++)      //умножить результат на
      pprod = mult10(pprod);    //  степень 10-ти
    tempsum = tempsum + pprod;  //прибавить произведение к
                                //текущей сумме
    }
  return tempsum;               //вернуть полученную текущую сумму
  }
//---------------------------------------------------------
verylong verylong::mult10(const verylong v) const //умножение аргумента 
                                                  //на 10
  {                
  char temp[SZ];
  for(int j=v.vlen-1; j>=0; j--)//сдвинуться на один разряд
    temp[j+1] = v.vlstr[j];     //выше
  temp[0] = '0';                //обнулить самый младший разряд
  temp[v.vlen+1] = '\0';        //поставить ограничитель строки
  return verylong(temp);        //вернуть результат
  }
//---------------------------------------------------------
verylong verylong::multdigit(const int d2) const
  {                          //умножение числа на
  char temp[SZ];             //аргумент (цифру)
  int j, carry = 0;
  for(j = 0; j<vlen; j++)    //для каждого разряда
    {              //  в этом сверхбольшом
    int d1 = vlstr[j]-'0';   //получить значение разряда
    int digitprod = d1 * d2; //умножить на цифру
    digitprod += carry;      //добавить старый перенос
    if( digitprod >= 10 )    //если возник новый перенос,
      {
      carry = digitprod/10;  //переносу присвоить //значение старшего разряда
      digitprod -= carry*10; //результату - младшего
      }
    else
      carry = 0;             //иначе перенос = 0
    temp[j] = digitprod+'0'; //вставить символ в строку
    }
  if(carry != 0)             //если на конце перенос,
    temp[j++] = carry+'0';   //это последний разряд
  temp[j] = '\0';            //поставить ограничитель
  return verylong(temp);     //вернуть сверхбольшое число
  }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2011, 14:33     Как сделать свою переменну в С++
Еще ссылки по теме:

Как создать свою библиотеку - C++
Есть несколько понятий в которых путаюсь. библиотека - какой-то файл заголовочный файл - файл с объявлениями (описаниями) как...

Как написать свою функцию atof() - C++
Как написать свою функцию atof()?

Как создать свою программу с кнопочками и т.д.? - C++
Доброго времени суток! Хочу узнать, или встать на правильное русло в потоке знания. Я студент 1 курса, со школы я решаю задачи, с...

Как правильно создать свою DLL ? - C++
как правильно создать свою DLL допустим имеется класс class SystemProcesses { typedef ...

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


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

Или воспользуйтесь поиском по форуму:
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
02.07.2011, 14:33     Как сделать свою переменну в С++ #11
Обычно в таких случаях используют большой-большой массив
Yandex
Объявления
02.07.2011, 14:33     Как сделать свою переменну в С++
Ответ Создать тему
Опции темы

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