Итак, я решил написать свой собственный тип данных multiprecision. Я написал простую функцию, которая добавляет большие числа, хранящиеся в vector<uint_fast8_t>
.
vector<uint_fast8_t> Add(vector<uint_fast8_t > x, vector<uint_fast8_t > y){
unsigned int x_size = x.size() / sizeof(uint_fast8_t);
unsigned int y_size = y.size() / sizeof(uint_fast8_t);
unsigned int res_size{};
if(x_size>y_size){
res_size = x_size;
y.insert(y.end(),uint_fast8_t(0), res_size-y_size);
} else{
res_size = x_size;
x.insert(x.end(),uint_fast8_t(0), res_size-x_size);
}
reverse(x.begin(), x.end());
reverse(y.begin(), y.end());
vector<uint_fast8_t > res(res_size, 0);
for(unsigned int i = 0; i < res_size; ++i){
uint_fast8_t curr = res[i] + x[i] + y[i];
if(curr >= 10){
if(i==res_size){
res.push_back(uint_fast8_t(1));
} else{
res[i+1] = uint_fast8_t(1);
}
res[i] = curr - uint_fast8_t(10);
} else{
res[i] = curr;
}
}
reverse(res.begin(), res.end());
return res;
}
Номер
Эта функция работает только для чисел от 0 до 10000000 (10000000
равно vector<uint_fast8_t>{1,0,0,0,0,0,0,0}
). Для больших чисел результаты сумасшедшие. Например, он выплевывает 10000000000 + 123 + = 1012300000123
. Почему это происходит?
Редактировать 1 Меня спросили об этом подразделении x.size() / sizeof(uint_fast8_t)
. Насколько я знаю, он возвращает размер объекта в байтах. Я делю его на размер uint_fast8_t, чтобы получить количество элементов в векторе. Казалось, хорошо работает. Может быть, я что-то неправильно понял.