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

Длинная арифметика. сумма факториалов. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Строки http://www.cyberforum.ru/cpp-beginners/thread322838.html
Помогите очень прошу.
C++ Превращене Составить программу, которая превращает неупорядоченые массивы В и С таким образом: меняет значения элементов с максимальным значением на найменшее значення в масиве, а мінімальное – наоборот на самое большое значения с этого масивва. Инициализацию, вывод элементов массива, их обробки организовать в отдельных функциях. http://www.cyberforum.ru/cpp-beginners/thread322836.html
C++ Нужен код для передачи данных из TextBox на почту или ICQ
подскажите код для передачи данных из TextBox1 на почту или аську или сниффер в крайнем случае заранее спс
C++ Создать динамический массив
Создать динамический массив указателей для сохранения двухмерного массива А в динамической памяте. Составить программу для подсчета суммы парних элементов масивва А розмера m×n, используя функцію обробки элементов.
C++ Ошибка при завершении программа. http://www.cyberforum.ru/cpp-beginners/thread322812.html
Проблема в следующим когда я создаю 3 объект case 1 и пробую после этого вывести case 2 вылетает ошибка в чем проблема ??? #include <iostream> #include <Windows.h> #include "Worker.h" using namespace std; class CWorker { public: CWorker(void);
C++ Упорядочивание элементов массива и Функции. Люди добрые помогите составить программки. У меня уже каша в голове из-за них :/ 1. Упорядочивание элементов массива Разработать программу, которая вводит целочисленную матрицу из n строк и m столбцов (1<n<=100, 1<m<=50) и упорядочивает элементы матрицы. Правило упорядочивания определяется вариантом: Разместить все отрицательные элементы в верхнюю левую область матрицы (заполняя ими матицу по... подробнее

Показать сообщение отдельно
diagon
Higher
1927 / 1193 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.06.2011, 07:50     Длинная арифметика. сумма факториалов.
Есть готовый код, на acmp проходит все тесты.
Алгоритмы взяты с сайта, ссылка на который приведена в посте #4
P.S. только он вычисляет 1!+2!+3!..+n!
Можете исправить под себя либо взять какие-либо функции.
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
#include <stdio.h>
#include <iostream>
#include <sstream>
#include <vector>
#define base 1000000000
void writelong(std::vector<int> vec){ //вывод длинного числа
    printf ("%d", vec.empty() ? 0 : vec.back());
    for (int i=(int)vec.size()-2; i>=0; --i)
        printf ("%09d", vec[i]);
}
std::vector<int> smult(std::vector<int> a, int b){//умножение длинного числа на короткое
    int carry = 0;
    for (size_t i=0; i<a.size() || carry; ++i) {
        if (i == a.size())
            a.push_back (0);
        long long cur = carry + a[i] * 1ll * b;
        a[i] = int (cur % base);
        carry = int (cur / base);
    }
    while (a.size() > 1 && a.back() == 0)
        a.pop_back();
    return a;
}
std::vector<int> fact(std::vector<int> a, int b){//длинный факториал
    for (int i = 1; i <= b; i++)
        a=smult(a,i);
    return a;
}
std::vector<int> sum(std::vector<int> a, std::vector<int> b){//длинная сумма
    int carry = 0;
    for (size_t i=0; i<std::max(a.size(),b.size()) || carry; ++i) {
        if (i == a.size())
            a.push_back (0);
        a[i] += carry + (i < b.size() ? b[i] : 0);
        carry = a[i] >= base;
        if (carry)  a[i] -= base;
    }
    return a;
}
int main(){
    std::vector<int> a(1,0),b(1,1);
    int N;
    std::cin >> N;
    for (int i = 1; i <= N; i++)
        a=sum(a,fact(b,i));
    writelong(a);
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru