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

Перегрузка оператора *= для vector<int> - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Заполнить матрицу 9x9 случайными числами. Отобразить матрицу симметрично относительно главной диагонали http://www.cyberforum.ru/cpp-beginners/thread104673.html
Заполнить матрицу случайными числами. Отобразить матрицу симметрично относительно главной диагонали
C++ обучающая система привет всем)))оч над курсовой выполненный на си или паскале...либо легенькая игра, либо обучающая система...сенкс всем кто поможет:) http://www.cyberforum.ru/cpp-beginners/thread104663.html
ООП Полиморфизм Наследование C++
У меня есть базовый класс и 2 производных от него класса... Как сделать, чтобы в программе я мог сделать такое обьявление: Force fc; fc = new GravityForce(nofg, 5, 2); fc = new ViscousDragForce(nofvd, 6, 2); И потом пробежатся по массиву и вызвать для каждого производного класса его собственный виртуальный метод примерно так
C++ Подправте пожалуйста код
Привет всем. Очень нужна ваша помощь... Вот исходный код на паскале: Program LAB1; uses crt; Procedure WriteByte(a:byte); var i:integer; begin for i:=7 downto 0 do begin if ((a shr i) and $01) <>0 then write('1')
C++ Отсортировать массив чисел методом пузырька http://www.cyberforum.ru/cpp-beginners/thread104621.html
помогите пожалуйста!!!! отсортировать массив чисел методом пузырька чтобы числа были не заданы ,а вводились пользователем(n-ое количество чисел)
C++ Передача элементов массива из одной функции в другую Подскажите пожалуйста, хочу написать тест проверки знаний, генерацию случайных элементов без повторений нашел в Internet переработал под себя, теперь столкнулся с задачей передачи элементов массива из одной функции в другую испльзую VS 2008 // программа теста // #include "stdafx.h" #include "time.h"// системная директива работы со временем #include "stdlib.h"// хранятся функции для работы... подробнее

Показать сообщение отдельно
outoftime
║XLR8║
509 / 431 / 33
Регистрация: 25.07.2009
Сообщений: 2,295

Перегрузка оператора *= для vector<int> - C++

14.03.2010, 22:07. Просмотров 1968. Ответов 10
Метки (Все метки)

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
#include <iostream>
#include <vector>
 
const long long base = 1000*1000*1000;
std::vector<int> &operator *= (std::vector<int> &a, std::vector<int> &b)
{
    std::vector<int> res(b.size() + a.size());
    for(int i = 0; i < a.size(); ++i)
    {
        for (int j = 0, carry = 0; j < b.size() || carry; ++j)
        {
            long long cur = res[i+j] + a[i] * long long( j < b.size() ? b[j] : 0 ) + carry;
            res[i+j] = cur % base;
            carry = cur / base;
        }
    }
    while (res.size() && !res.back()) res.pop_back();
    a = res;
    return res;
}
 
std::vector<int> BinPow(int a, int n)
{
    std::vector<int> res(1, 1), b(1, a);
    while (n) {
        if (n&1) --n, res *= b;
        else n >>= 1, b *= b;
    }
    return res;
}
 
int main()
{
    int a, n;
    std::cin >> a >> n;
    std::vector<int> res = BinPow(a, n);
    std::cout << res.back();
    for(int i = res.size()-2; i >= 0; --i) printf("%09d", res[i]);
    std::cout << std::endl;
    system("pause");
}
Меня смущает тот факт, что для сохранения значения умножения двух векторов нужно присвоить a = res; и потом еще раз его вернуть return res; разве, при возврате результаа он не должен сохранятся переменной строки 26-27 ??
Просто когда я убераю строку 18 результат вычислений пропадает. Можете сказать почему и как исправить?

И, по ходу дела, какой аналог printf("%09d", res[i]); у std::cout ??
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru