Мне дали учебное задание написать класс, реализующий длинное число и пару функций для работы с ним. Вот моя реализация:
#include <iostream>
#include <cstdlib>
#include <vector>
int int_len(int c){
int len = 1;
while (c > 9){
c /= 10;
len ++;
}
return len;
}
int get_two_last(int & num){
int c = num%100;
num /= 100;
return c;
}
class BigInteger{
public:
int *arr;
int sign;
int len;
void change_sign(){
sign = -sign;
}
BigInteger(){
arr = (int*)calloc(1, sizeof(int));
arr[0] = 0;
sign = 1;
len = 1;
}
BigInteger(int num): BigInteger(){
len = int_len(num);
sign = num >= 0 ? 1 : -1;
arr = (int*)realloc(arr, (len/2 + 1) * sizeof(int));
for (size_t i = len/2; i >= 0; i--){
arr[i] = get_two_last(num);
}
}
~BigInteger(){
delete(arr);
}
};
int get_num_from_BigInteger(BigInteger big_int){
int len = big_int.len;
int * arr = big_int.arr;
int sign = big_int.sign;
int num = 0;
for(size_t i = 0; i < len/2 + 1; i++){
num *= 10;
num += arr[i];
}
return num * sign;
}
BigInteger pluse(BigInteger &big_int_1, BigInteger &big_int_2){
BigInteger big_int;
std::vector<int> vect;
int * array_1 = big_int_1.arr;
int len_1 = big_int_1.len / 2 + 1;
int * array_2 = big_int_2.arr / 2 + 1;
int len_2 = big_int_2.len;
int minn = len_2 < len_1 ? len_2 : len_1;
int mem = 0;
int i;
for (i = 1; i <= minn; i++){
int c = mem + array_1[len_1-i] + array_2[len_2-i];
if (c > 99){
mem = c / 100;
c %= 100;
}
else mem = 0;
vect[i-1] = c;
}
vect[i-1] = mem;
std::reverce(vect.begin(), vect.end());
big_int.len = vect.size() * 2;
big_int.arr = (int *)calloc(vect.size(), sizeof(int));
for (int i = 0; i < vect.size(); i++){
big_int.arr[i] = vect[i];
}
return big_int;
}
BigInteger minuse(BigInteger big_int_1, BigInteger big_int_2){
big_int_2.change_sign();
return pluse(big_int_1, big_int_2);
}
int main(){
BigInteger my_int(-454);
std::cout << get_num_from_BigInteger(my_int);
return 0;
}
Здесь в классе я храню 3 поля, характеризующих наше число.
Я написал функцию, с помощью которой я могу получить число из инициализированного класса (для проверки работоспособности), но когда я пытаюсь его вывести у меня ничего не выводится. Подскажите пожалуйста, где мне искать ошибку (буду благодарен за помощь в исправлении), да и вообще хотелось бы увидеть все мои ошибки).
Заранее спасибо за помощь! (я уверен, что у меня какая-то глупая ошибка и скорее всего не одна, так что не кидайтесь камнями пж)