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

Длинная арифметика. Умножение двух длинных чисел. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Int to string http://www.cyberforum.ru/cpp-beginners/thread285630.html
Какой способ перевода Int в String самый лёгкий ? В делфи привык писать Inttostr (i) , а на с++ такое есть ?
Visual C++ MFC. Ошибка LNK2019 , LNK1120 Работаю в среде MFC: bool CheckKey() { for (int i=1; i<= Key.GetLength(); i++) for (int j=1; j <= Key.GetLength(); j++) if ((Key == Key) && (i != j)) return false; return true; http://www.cyberforum.ru/cpp-beginners/thread285627.html
C++ Класс комплексных чисел(подправить)
Помогите дописать в оераторе "умножение" умножение вещественного числа на комплексное,double на комплексное. Очень надо. Заранее спасибо #include <iostream> #include <conio.h> #include <math.h> #include <complex> using namespace std; const double Pi = 3.14159265358979323846; class Complex
C++ ООП, разобрать задание.
Составить описание класса для представления комплексных чисел с возможностью задания вещественной и мнимой частей как числами типов double, так и целыми числами. Обеспечить выполнение операций сложения, вычитания и умножения комплексных чисел Нужно посмотреть в коде ошибки, препод придирается к ней, но не поясняет в чем проблема Main.cpp #include <iostream> #include "compl.h" void...
C++ справочная система компонентов компьютерной техники - С++ http://www.cyberforum.ru/cpp-beginners/thread285537.html
Помогите пожалуйста!!!Тема курсовой-справочная система компонентов компьютерной техники Нужно написать программу на языке С++ Поняла только что необходимо использовать тему классы и можно будет воспользоваться массивом
C++ Лабораторная на C++. Строки. Очень прошу помочь!) Нужно написать программу на языке C++ с использованием стандартных функций для обработки строк.(не CString) Задан текст, состоящий из слов, записанных через запятые, и заканчивающийся точкой. Длина текста не больше 200 символов, могут быть использованы любые символы. Словом считать последовательность символов, не содержащую пробел. Выдать слова текста и их длины.... подробнее

Показать сообщение отдельно
diagon
Higher
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.05.2011, 15:38     Длинная арифметика. Умножение двух длинных чисел.
Вычисляет факториал с помощью умножения длинного на длинное, с того же сайта взято. Писал для себя, чтобы в векторах и длинной арифметике попрактиковаться, поэтому извиняюсь за быдло-код.
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
115
116
117
118
119
120
121
122
123
#include <iostream>
#include <vector>
#include <algorithm>
void readlong(std::vector<int> &a); //чтение
void writelong(std::vector<int> a){  //вывод
    for (size_t i=0; i< a.size();i++) std::cout << a[i];}
short compare(std::vector<int> a,std::vector<int> b); //сравнение
void nol(std::vector<int> &a,std::vector<int> &b); //добавление нулей в начало(для суммы)
std::vector<int> sum(std::vector<int> a, std::vector <int> b); //сумма
std::vector<int> smult(std::vector<int> a,int b); //умножение длинного на короткое
void ten(std::vector<int> &a,int b);//добавление b нулей в конец
long long vectoint(std::vector<int> a);//перевод вектора в int
std::vector<int> mult (std::vector<int> a, std::vector<int> b); //умножение длинного на длинное
std::vector<int> factorial(std::vector<int> b); //факториал
int main(){
 
    std::vector<int> a,b,c,rez;
    readlong(a);
    writelong(factorial(a));
    return 0;
}
void readlong(std::vector<int> &a){
    char c;
    for(;;){
        std::cin.get(c);
        if ((c==' ')||(c=='\n'))break;
        a.push_back(c-48);
    }
}
short compare(std::vector<int> a,std::vector<int> b){
    if (a.size()>b.size()) return 1;
    if (a.size()<b.size()) return 2;
    for (size_t i=0; i<a.size();i++){
    if (a[i]>b[i]) return 1;
    if (a[i]<b[i]) return 2;
    }
    return 0;
 
}
void nol(std::vector<int> &a,std::vector<int> &b){
    if (a.size()==b.size()) return;
    if (a.size()>b.size()) std::swap(a,b);
    for (size_t i=0; i< a.size()-b.size(); i++){
        a.insert(a.begin(),0);
    }
}
std::vector<int> sum(std::vector<int> a, std::vector<int> b){
    std::vector<int>c;
    short p=0;
    nol(a,b);
    c.assign(a.size(),0);
    for (short i = a.size()-1; i >= 0; i--) {
        c[i]=a[i]+b[i]+p;
        p=0;
        if (c[i]>9) {c[i]-=10; p=1;}
    }
    if (p) c.insert(c.begin(),1);
    return c;
}
std::vector<int> smult(std::vector<int> a,int b){
    std::vector<int> c;
    if (!b||!a[0]) {c.push_back(0); return c; }
    for (size_t i = 0; i <a.size(); i++) {
        if (i==c.size()) c.push_back(0);
        c[i]=a[i]*b;
    }
    for (size_t i=c.size()-1; i > 0; i--) {
        if (c[i]>9) {
            c[i-1]+=c[i]/10;
            c[i]%=10;
            }
        }
    if (c[0]<10) return c;
    short p=c[0];
    c[0]%=10;
    for(;;){
        if (!(p/10)) break;
        c.insert(c.begin(),p/10);
        p/=10;
    }
    return c;
}
void ten(std::vector<int>& a,int b){
    for (; b; b--)
        a.push_back(0);
}
std::vector<int> factorial(std::vector<int>(b)){
    std::vector<int> a,o,c;
    a.push_back(1);
    o.push_back(1);
    c.push_back(1);
    for(long int i=0;i<vectoint(b)-1;i++){
        c=sum(c,o);
        a=mult(c,a);
    }
    return a;
}
long long vectoint(std::vector<int> a){
    long long c=0,q=1;
    for (short i = a.size()-1; i >=0; i--) {
        c+=a[i]*q;
        q*=10;
    }
    return c;
}
std::vector<int> mult (std::vector<int> a, std::vector<int> b)
{
    reverse(a.begin(),a.end());
    reverse(b.begin(),b.end());
    std::vector<int> c(a.size()+b.size());
    for (int i = 0; i < a.size(); ++i)
        for (int j = 0, carry = 0; j < b.size() || carry; ++j)
        {
            long long cur = c[i+j] + a[i] * (j < b.size() ? b[j] : 0) + carry;
            c[i+j] = cur % 10;
            carry = cur / 10;
        }
 
    while (c.size() > 1 && c.back() == 0)
        c.pop_back();
        reverse(c.begin(),c.end());
        return c;
}
 
Текущее время: 03:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru