У меня есть класс, назовите его 'BigNumber', у которого есть поле вектора v.
Каждый элемент должен быть одним ди git.
Я хочу реализовать метод для умножения этого вектора на целое число , но также сохраняют элементы один di git.
Например: <7,6> * 50 = <3,8,0,0>
Вектор представляет число, сохраненное таким образом.
В моем примере <7,6> равно 76, а <3,8,0,0> - 3800.
Я пробовал следующее, но это не очень хорошо (хотя это работает), а не фактическое решение проблемы.
//int num, BigNumber bn
if (num > 0)
{
int value = 0, curr = 1;
for (int i = bn.getBigNumber().size() - 1; i >= 0; i--)
{
value += bn.getBigNumber().at(i) * num * curr;
curr *= 10;
}
bn.setBigNumber(value); //this shouldn't be here
return bn;
}
Ожидаемый алгоритм - это умножение самого вектора, а не переменной, которую я конвертирую в этот BigNumber.
Способ, которым я устанавливаю Integer в BigNumber:
void BigNumber::setBigNumber(int num)
{
if (num > 0)
{
bigNum.clear();
while (num != 0)
{
bigNum.push_back(num % 10);
num = (num - (num % 10)) / 10;
}
std::reverse(bigNum.begin(), bigNum.end());
}
else
{
throw TOOSMALL;
}
};
Метод, который я хочу реализовать:
//class BigNumber{private: vector<int> bigNum; ... }
void BigNumber::multiplyBigNumber(BigNumber bn, int num)
{
if (num > 0)
{
//bn.bigNum * num
}
else
{
throw TOOSMALL;
}
}