Смекни!
smekni.com

Реализация класса больших чисел (стр. 3 из 3)

{

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 << «Выберите режим вычисления:&bsol;n1 – режим выражения&bsol;n2 – режим выбора операции&bsol;n ->»;

cin >> y;

if (y == 1)

{

cout << «Введите выражение для вычисления:&bsol;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 << «&bsol;n&bsol;nВведите номер операции: &bsol;n»;

cout << «1 – сложение чисел &bsol;n»;

cout << «2 – разность чисел &bsol;n»;

cout << «3 – умножение чисел &bsol;n»;

cout << «4 – деление чисел &bsol;n»;

cout << «5 – остаток от деления чисел &bsol;n»;

cout << «6 – возведение в степень &bsol;n»;

cout << «7 – факториал &bsol;n»;

cout << «8 – ввести новые числа&bsol;n»;

cout << «9 – выйти из программы&bsol;n»;

cout << «->»;

cin >> x;

switch(x)

{

case 1:

{

cout << «&bsol;nСуммачисел:»;

summ = summ.summa (bint1, bint2);

summ.vector_print(summ);

break;

}

case 2:

{

cout << «&bsol;nРазностьчисел:»;

rasn = rasn.rasnost (bint1, bint2);

rasn.vector_print(rasn);

break;

}

case 3:

{

cout << «&bsol;nПроизведениечисел:»;

proisv = proisv.proisvedenie (bint1, bint2);

proisv.vector_print(proisv);

break;

}

case 4:

{

cout << «&bsol;nДелениечисел:»;

chastnoe = chastnoe.delenie (bint1, bint2);

chastnoe.vector_print(chastnoe);

break;

}

case 5:

{

cout << «&bsol;nОстаток от деления чисел:»;

chastnoe = chastnoe.ostatok_delenie (bint1, bint2);

chastnoe.vector_print(chastnoe);

break;

}

case 6:

{

int st;

cout << «Введите в какую степень нужно возвести первое число:»;

cin >> st;

cout << «&bsol;n» << st <<» – аястепеньчисла:»;

step = step.stepen (bint1, st);

step.vector_print(step);

break;

}

case 7:

{

cout << «&bsol;nФакториал первого числа:»;

fak = fak.faktorial(bint1);

fak.vector_print(fak);

break;

}

case 8:

{

bint1 = BigInteger();

cout << «&bsol;nВведитепервоечисло:»;

bint1 = bint1.chtenie();

bint2 = BigInteger();

cout << «Введите второе число:»;

bint2 = bint2.chtenie();

break;

}

case 9:

{

flag = false;

break;

}

default:

{

cout << «&bsol;nОшибка ввода, повторите процедуру!»;