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

Biginteger и переменная - C++

Восстановить пароль Регистрация
 
oks1d
4 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 91
18.12.2013, 17:06     Biginteger и переменная #1
Например есть такое :
C++
1
2
3
4
5
6
#include "BigIntegerLibrary.hh"
    
    BigInteger a = 65536;
    cout << (a * a * a * a * a * a * a * a);
    
    (prints 340282366920938463463374607431768211456)
Мне необходимо объявить переменную и приравнять к 0, чтобы задать ей позже какое-то значение, (а в примере выше ей сразу присваивается значение), чтобы задать ей позже какое-то значение,
напримеp:
Biginteger a=0;

Компилятор VS12 ругается, пишет
error: Не существует подходящей функции преобразования из Biginteger в int
Тогда какого типа должна быть переменная??? Мне придется присваивать ей большие значения,но сначало как-то надо же её объявить . Спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2013, 17:06     Biginteger и переменная
Посмотрите здесь:

C++ переменная
C++ BigInteger(c++)
функции класса BigInteger. C++
biginteger C++
C++ Переменная
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
18.12.2013, 17:08     Biginteger и переменная #2
почитай про перегрузку приведения к типу ( или как-то так)
в классе перегружаешь оператор приведения к такому-то типу и всё ок( сам не помню особо не пользовался пока что)
oks1d
4 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 91
18.12.2013, 17:29  [ТС]     Biginteger и переменная #3
Цитата Сообщение от dzrkot Посмотреть сообщение
почитай про перегрузку приведения к типу ( или как-то так)
в классе перегружаешь оператор приведения к такому-то типу и всё ок( сам не помню особо не пользовался пока что)
только вот к какому типу
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
18.12.2013, 17:38     Biginteger и переменная #4
так, стоп, я невнимательно прочитал...Вы содаёте объект а типа БигИнтеджер, ему в конструктор вы записываете 65536 число. Перегрузите оператор присваивания, тогда возможно будет после создания объектра присваивать ему др значения (иногда для этого необходимо перегрузить конструктор)
т.е. что-то такое будет
C++
1
2
3
4
5
friend BigInteger& operator=(BigInteger&, int); // определение без friend
{
//
return *this;
}
oks1d
4 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 91
20.12.2013, 11:41  [ТС]     Biginteger и переменная #5
Например у меня есть переменная p и ей пользователь присаивает какое то большое значение. Как это будет выглядеть в коде?
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
20.12.2013, 11:52     Biginteger и переменная #6
В классе создаем такой метод
C++
1
2
3
4
5
6
BigInteger& operator=(char* ss )
{
    BigIntege t(ss); // Конструктор из строки делает BigInteger
    (*this)=t; // Копируем в текущий объект (Не забудьте написать метод  operator=BigInteger& operator=(char* BigInteger); ).
    return *this;
}
Использование
C++
1
2
3
Biginteger b1,b2("111111111111111113333334444");
char n2[]="6666666666666666666677777777777777";
b1=n2;
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
20.12.2013, 12:01     Biginteger и переменная #7
кстати для той функции не будет return *this;, там будет сооздаваться временный объект, который мы будет возвращать по значению,после чего будет вызываться констурктор копирования и применяться к временному объекту, и объекту, вызывающему operator=

смотря какое...если оно будет превосходить long double , то передавать через строку тогда, т.е. будет
C++
1
2
3
4
5
6
7
8
9
10
11
12
BigInteger& operator=(BigInteger& obj, string& str);
{
// не знаю что в объекте, переводим string (если возможно) т.к. если объект построен на типах
// int итп, то с беск больш числами мы работать не сможем и нам придётся его цеиком переписывать 
// под string , включая всю арифметику итп итд
 
или проще, если соотв преобразования уже сделаны в конст копирования
// BigInteger temp(str); // тут мы вызываем конструктор с инициализацией от строки типа BigInteger(string);
// obj=temp;     //  вызываем оператор присваивания объеков
//
return &obj;
}
тут надо подумать как лучше, и вообще задачу в целом...
oks1d
4 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 91
20.12.2013, 12:41  [ТС]     Biginteger и переменная #8
Вот весь код, фун-ия main в самом низу , необходимо чтобы входное значение переменной p было biginteger
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#define _CRT_SECURE_NO_WARNINGS
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
 
#pragma hdrstop                  // Предоставляет дополнительный элемент управления по именам файлов предварительной компиляции и над местоположением на котором сохраняется состояние компиляции
 
using namespace std;
 
int power(int a, int b, int n){// a^b mod n
    int tmp=a;
    int sum=tmp;
    for(int i=1;i<b;i++){
        for(int j=1;j<a;j++){
            sum+=tmp;
            if(sum>=n){
                sum-=n;
            }
        }
        tmp=sum;
    }
    return tmp;
}
 
int mul(int a, int b, int n){// a*b mod n
    int sum=0;
     
    for(int i=0;i<b;i++){
        sum+=a;
         
        if(sum>=n){
            sum-=n;
        }
    }
 
    return sum;
}
 
 
void crypt(int p,int g,int x, string inFileName,string outFileName){
 
setlocale( LC_ALL,"Russian" );
    ifstream inf(inFileName.c_str());   //Формирует массив строк  И возвращает указатель на него.
    ofstream outf(outFileName.c_str()); 
    
    int y=power(g,x,p);
    printf("Открытый ключ (p,g,y)=", setlocale(LC_ALL, "Russian"));
    cout<<""<<"("<<p<<","<<g<<","<<y<<")"<<endl;
    cout<<"Закрытый ключ x="<<x<<endl;
    cout<<"Введите текст который необходимо зашифровать\n";
 
 
    while(inf.good()){
        int m=inf.get();
        if(m>0){
            cout<<(char)m;
 
            int k=rand()%(p-2)+1; // 1 < k < (p-1)
            int a= power(g,k,p);
            int b= mul(power(y,k,p),m,p);
            outf<<a<<" "<<b<<" ";
        }
    }
 
    cout<<endl;
 
    inf.close();
    outf.close();
}
 
void decrypt(int p,int x,string inFileName,string outFileName){
    
    ifstream inf(inFileName.c_str());
    ofstream outf(outFileName.c_str());
    setlocale( LC_ALL,"Russian" );
    
    cout<<"\nДешифрованый текст:"<<endl;
 
    while(inf.good()){
        int a=0;
        int b=0;
        inf>>a;
        inf>>b;
 
        if(a!=0&&b!=0){
 
 
            int deM=mul(b,power(a,p-1-x,p),p);// m=b*(a^x)^(-1)mod p =b*a^(p-1-x)mod p 
            char m=static_cast<char>(deM);
        
            outf<<m;
            cout<<m;
        }
    }
 
    cout<<endl;
 
    inf.close();
    outf.close();
}
 
int main(){
    srand(time(NULL));
    setlocale( LC_ALL,"Russian" );
    int p,g,x;          //переделать под biginteger переменную p
    cout<<"Введите p,g,x\n";
    cin>>p>>g>>x;
    crypt(p,g,x, "input.txt","outsh.txt");  
    decrypt(p,x, "outsh.txt","outdesh.txt");
    system("pause");
    return 0;
}
Добавлено через 33 минуты
p - большое целое число, и все, оно не преобразуется ни в стринг ни в какой то ещё тип . Оно задается 1 раз по ходу работы программы и все
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.12.2013, 12:58     Biginteger и переменная #9
Цитата Сообщение от oks1d Посмотреть сообщение
p - большое целое число, и все, оно не преобразуется ни в стринг ни в какой то ещё тип . Оно задается 1 раз по ходу работы программы и все
А как оно по-Вашему может быть задано? Представление в виде строки - удобный способ задать число любого размера.
У Вас в начале треда один код, в сообщении #8 уже совсем другой. Не понимаю, что Вам действительно нужно.
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
20.12.2013, 12:58     Biginteger и переменная #10
Цитата Сообщение от oks1d Посмотреть сообщение
p - большое целое число, и все
А кто за Вас будет реализовывать это большое целое?
oks1d
4 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 91
20.12.2013, 14:37  [ТС]     Biginteger и переменная #11
Цитата Сообщение от Tulosba Посмотреть сообщение
А как оно по-Вашему может быть задано? Представление в виде строки - удобный способ задать число любого размера.
У Вас в начале треда один код, в сообщении #8 уже совсем другой. Не понимаю, что Вам действительно нужно.
По примеру из 1 сообщения я хотел попробовать разобраться со своей переменной

Добавлено через 1 минуту
Цитата Сообщение от zss Посмотреть сообщение
А кто за Вас будет реализовывать это большое целое?
GMP,NTL,crypt++,biginteger , пока не решил что из этого, только разбираюсь в них.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2013, 14:48     Biginteger и переменная
Еще ссылки по теме:

C++ BigInteger
BigInteger C++
C++ Глобальная переменная определена в хидере. Компилятор ругается на то, что переменная переопределена несколько раз

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.12.2013, 14:48     Biginteger и переменная #12
oks1d, если нужно чтобы работало такое:
C++
1
2
  biginteger p;
  cin>>p;
То для типа biginteger должен быть реализован
C++
1
 operator>>( std::istream& i, biginteger& value)
Если его нет, то надо смотреть, что вообще есть для ввода. В зависимости от того на какой реализации остановитесь.
Yandex
Объявления
20.12.2013, 14:48     Biginteger и переменная
Ответ Создать тему
Опции темы

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