{
BigInteger big1;
BigInteger big2;
string temp = «0123456789»;
string snaki = «-+*/%!^»;
string str;
cin >> str; // считываем строку и в зависимости от знака выбираем действие с числами через switch
int perekluchatel = -1;
if (str.at(0) == snaki.at(0)) big1.znak = '-';
for (int i = 0; i < (int) str.length(); i++)
{
for (int j = 0; j < 10; j++)
{
if ((perekluchatel == -1) && (str.at(i) == temp.at(j))) {big1.vect.push_back(j); break;}
if ((perekluchatel!= -1) && (str.at(i) == temp.at(j))) {big2.vect.push_back(j); break;}
}
if (perekluchatel == -1)
for (int j = 0; j < 7; j++)
{
if ((str.at(i) == snaki.at(j)) && (i!= 0))
{
perekluchatel = j;
if (perekluchatel == 5) break;
if (str.at (i+1) == snaki.at(0)) big2.znak = '-'; break;
}
}
}
cout << str << «=»;
switch(perekluchatel)
{
case 0:
{
return rasnost (big1, big2); break;
}
case 1:
{
return summa (big1, big2); break;
}
case 2:
{
return proisvedenie (big1, big2); break;
}
case 3:
{
return delenie (big1, big2); break;
}
case 4:
{
return ostatok_delenie (big1, big2); break;
}
case 5:
{
return faktorial(big1); break;
}
case 6:
{
BigInteger edinica;
edinica.vect.push_back(1);
BigInteger dvoika;
dvoika.vect.push_back(2);
BigInteger step;
step.vect = big1.vect;
BigInteger tempbig2;
tempbig2.vect = big2.vect;
big2.znak = ' ';
while (big2.vect.size()!= 0 && big2.vect.at(0)!= 1)
{
big1 = proisvedenie (big1, step);
big2 = rasnost (big2, edinica);
big2 = dell_null(big2);
}
BigInteger proverka = ostatok_delenie (tempbig2, dvoika);
if (proverka.vect.at(0) == 0)
big1.znak = ' ';
return big1;
break;
}
}
}
};
Листинг 2. Файл Main.cpp
#include <clocale>
#include «BigInteger.h» // подключаемклассбольшихцелыхчисел
void main() // функция использующая большие целые числа
{
setlocale (LC_CTYPE, «Russian»);
BigInteger bint1;
BigInteger bint2;
BigInteger summ;
BigInteger rasn;
BigInteger proisv;
BigInteger step;
BigInteger fak;
BigInteger chastnoe;
int x, y; // переключатели режима вычисления
bool flag = true;
cout << «Выберите режим вычисления:\n1 – режим выражения\n2 – режим выбора операции\n ->»;
cin >> y;
if (y == 1)
{
cout << «Введите выражение для вычисления:\n»;
while (true)
{
BigInteger resultat;
resultat = resultat.vichislenie();
resultat.vector_print(resultat);
cout << endl;
}
}
else
{
cout << «Введите первое число:»;
bint1 = bint1.chtenie();
cout << «Введите второе число:»;
bint2 = bint2.chtenie();
while (flag == true)
{
cout << «\n\nВведите номер операции: \n»;
cout << «1 – сложение чисел \n»;
cout << «2 – разность чисел \n»;
cout << «3 – умножение чисел \n»;
cout << «4 – деление чисел \n»;
cout << «5 – остаток от деления чисел \n»;
cout << «6 – возведение в степень \n»;
cout << «7 – факториал \n»;
cout << «8 – ввести новые числа\n»;
cout << «9 – выйти из программы\n»;
cout << «->»;
cin >> x;
switch(x)
{
case 1:
{
cout << «\nСуммачисел:»;
summ = summ.summa (bint1, bint2);
summ.vector_print(summ);
break;
}
case 2:
{
cout << «\nРазностьчисел:»;
rasn = rasn.rasnost (bint1, bint2);
rasn.vector_print(rasn);
break;
}
case 3:
{
cout << «\nПроизведениечисел:»;
proisv = proisv.proisvedenie (bint1, bint2);
proisv.vector_print(proisv);
break;
}
case 4:
{
cout << «\nДелениечисел:»;
chastnoe = chastnoe.delenie (bint1, bint2);
chastnoe.vector_print(chastnoe);
break;
}
case 5:
{
cout << «\nОстаток от деления чисел:»;
chastnoe = chastnoe.ostatok_delenie (bint1, bint2);
chastnoe.vector_print(chastnoe);
break;
}
case 6:
{
int st;
cout << «Введите в какую степень нужно возвести первое число:»;
cin >> st;
cout << «\n» << st <<» – аястепеньчисла:»;
step = step.stepen (bint1, st);
step.vector_print(step);
break;
}
case 7:
{
cout << «\nФакториал первого числа:»;
fak = fak.faktorial(bint1);
fak.vector_print(fak);
break;
}
case 8:
{
bint1 = BigInteger();
cout << «\nВведитепервоечисло:»;
bint1 = bint1.chtenie();
bint2 = BigInteger();
cout << «Введите второе число:»;
bint2 = bint2.chtenie();
break;
}
case 9:
{
flag = false;
break;
}
default:
{
cout << «\nОшибка ввода, повторите процедуру!»;