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

Остаток от деления больших чисел в массивах - C++

Восстановить пароль Регистрация
 
Monster-Lock
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 9
27.04.2013, 22:42     Остаток от деления больших чисел в массивах #1
Пытаюсь реализовать полностью рабочий шифр Диффи-Хеллмана. Возведение в большую степень реализовал, но вот как реализовать получение остатка от деления - не знаю. Были мысли делить поразрядно, но это слишком трудоемко, по моему мнению. Поэтому прошу вашей помощи, как можно реализовать остаток от деления двух больших чисел, содержащихся в массивах? И еще, в коде есть одна неточность, из-за которой в произведении получается много нулей, а уже потом идет само произведение. Я знаю, что это из-за
C++
1
sizeRez
, но как вычислить именно то значение sizeRez, чтобы оно идеально подходило? Код не совсем маленький, поэтому спрячу его под спойлер.
Кликните здесь для просмотра всего текста

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
#include "stdafx.h"
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main(){
    int shift=0, temp, firstNumVal, numVal, sizeRez, countNum;
    string firstNum, secondNum, rezfirst, rezsecond;
    firstNum="11";
    secondNum="11";
    ostringstream ss;
    for (int k=1; k<100; k++)
    {
    sizeRez=firstNum.length()+secondNum.length();
    int* product = new int  [sizeRez];
    memset(product, 0, sizeRez*sizeof(int));
    for (int f=firstNum.length(); --f>=0;)
    {
        firstNumVal=firstNum[f]-'0';
        countNum=shift;
        for (int s=secondNum.length(); --s>=0;)
        {           
            numVal=firstNumVal*(secondNum[s]-'0');
            product[countNum]    += numVal%10;
            if (product[countNum]>=10) 
                {product[countNum]-=10; ++product[countNum+1];}
            product[countNum+1]  += numVal/10;
            if (product[countNum+1]>=10) 
                {product[countNum+1]-=10;; ++product[countNum+2];}
            ++countNum;
        }
        ++shift;
    }
    shift=0;
    countNum=0;
    firstNum.clear();
    ss.str(string());
    for (int i=sizeRez; --i>=0;){
        ss<<product[i];
        product[i]=0;
    firstNum=ss.str();
    }
    }
    for (int i=95; i<sizeRez; i++)
    {
        rezfirst[i-95]=firstNum[i];
        cout<<firstNum[i];
    }
    cout<<endl<<endl;
    firstNum="2";
    secondNum="2";
    for (int k=1; k<256; k++)
    {
    sizeRez=firstNum.length()+secondNum.length();
    int* product = new int  [sizeRez];
    memset(product, 0, sizeRez*sizeof(int));
    for (int f=firstNum.length(); --f>=0;)
    {
        firstNumVal=firstNum[f]-'0';
        countNum=shift;
        for (int s=secondNum.length(); --s>=0;)
        {           
            numVal=firstNumVal*(secondNum[s]-'0');
            product[countNum]    += numVal%10;
            if (product[countNum]>=10) 
                {product[countNum]-=10; ++product[countNum+1];}
            product[countNum+1]  += numVal/10;
            if (product[countNum+1]>=10) 
                {product[countNum+1]-=10;; ++product[countNum+2];}
            ++countNum;
        }
        ++shift;
    }
    shift=0;
    countNum=0;
    firstNum.clear();
    ss.str(string());
    for (int i=sizeRez; --i>=0;){
        ss<<product[i];
        product[i]=0;
    firstNum=ss.str();
    }
    }
    for (int i=178; i<sizeRez; i++)
    {
        rezsecond[i-178]=firstNum[i];
        cout<<firstNum[i];
    }
 
    cout<<endl; system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2013, 22:42     Остаток от деления больших чисел в массивах
Посмотрите здесь:

C++ Написать программу, расщепляющую упорядоченный линейный список целых чисел на три упорядоченных списка - имеющих остаток от деления на 3, ра
остаток от деления C++
C++ Найти сумму таких чисел в диапазоне [a;b], у которых остаток от деления на 7 такой же, как и у b при делении на 7.
Дан массив натуральных чисел. Указать те, у которых остаток от деления на М равен L (0<L<M-1). C++
C++ Остаток от деления
Для двух целых чисел найти остаток и частное от целочисленного деления, частное от вещественного деления C++
Указать те из чисел последовательности, у которых остаток от деления на М равен L C++
Остаток от деления C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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