Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для Wahlberg
70 / 70 / 3
Регистрация: 26.11.2010
Сообщений: 371

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

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

Студворк — интернет-сервис помощи студентам
Мне нужно подсчитывать очень большие числа, порядка 10^100000, и нужно создать свою переменную как можно это сделать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.07.2011, 00:33
Ответы с готовыми решениями:

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

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

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

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

Добавлено через 5 минут
студентик, сомневаюсь, что Ваш вариант работы с большими числами будет удачен и производителен ( не видел реализации, и не пробовал таким методом ) и будет ли он вообще работать, если говорить о большем, чем хранении большого числа в памяти - умножение больших чисел, сложение, деление etc...
0
программист С++
 Аватар для sandye51
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
01.07.2011, 01:54
Mиxaил, будет, а почему нет-то.
обычно так и делают вообще-то
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
01.07.2011, 02:26
Цитата Сообщение от sandye51 Посмотреть сообщение
обычно так и делают вообще-то
делают, но через структуры данных с произвольным доступом, а не

Цитата Сообщение от студентик Посмотреть сообщение
стеки, очереди.
0
 Аватар для Wahlberg
70 / 70 / 3
Регистрация: 26.11.2010
Сообщений: 371
01.07.2011, 21:13  [ТС]
Ну как сделать-то?)(
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.07.2011, 21:19

Не по теме:

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

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));


Либо использовать буст
Или вот, как вариант.
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
01.07.2011, 22:56
Или вот я попробовал сегодня GMP.
1
40 / 38 / 5
Регистрация: 22.01.2011
Сообщений: 670
02.07.2011, 13: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
#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);     //вернуть сверхбольшое число
  }
0
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
02.07.2011, 14:33
Обычно в таких случаях используют большой-большой массив
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.07.2011, 14:33
Помогаю со студенческими работами здесь

Возможно ли создать свою фцию system() и как это сделать?
Возникла потребность реализовать вызов ф-ции system() без упоминания таковой (то есть слова system). Как можно это сделать. Возможно ли...

можно ли в с++ вызвать переменную из одной функции в другую т.е. мы переменну задали в одной функции а использовали в другой... и как это реализовать?
можно ли в с++ вызвать переменную из одной функции в другую т.е. мы переменну задали в одной функции а использовали в другой... и как это...

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

Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив)
Изучаю c++ по одной книжке.Она говорить не умеет.. Так вот понадобилось написать функцию,которая как параметр получает указатель на...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru