Операции с числами больше 2^32???(((------Это не проблема!!!))) (Длинная арифметика)


Длинная арифметика — в вычислительной технике операции над числами, разрядность которых превышает длину машинного слова данной вычислительной машины. Частный случай — арифметика произвольной точности — относится к арифметике, в которой длина чисел ограничена только объёмом доступной памяти.



#include <iostream>
#include <cstdlib>
using namespace std;

const int n=50;
int a[n], b[n], c[n];
char s[n], tmp[1];
void input_(int x[])//ввод цифр в конец массива

{
int i,j;
cout<<"Vvdedite ";
cin>>s;
j=0;
while (s[j]!='\0') j++;
i=n;
while (j>=0)
{
tmp[0] = s[j--];
x[i--]=atoi(tmp);
}
}
void output_(int x[])//вывод
{
int i;
bool b=false;
for (i=0; i<n; i++)
if (x[i]!=0) b=true;
if (b==true)//если не нулевой массив
{
for (i=0; i<n; i++)
cout<<x[i];
cout<<endl;
}
}
void Inc10(int x[])//умножение на 10 (сдвиг влево)
{
int i;
for (i=1; i<n; i++)
x[i-1]=x[i];
x[n-1]=0;
}
int summa(int x[], int y[], int z[])//суммирование
{
int i,k;
for (k=0; k<n; k++) z[k]=0;
for (i=n-1; i>=0; i--)
{
k=x[i]+y[i]+z[i];
z[i-1]=k/10;
z[i]=k%10;
}
}
void proizv(int x[], int y[], int xy[])//умножение столбиком
{
int z[n],tmp[n],i,j,k;
for (k=0; k<n; k++)
xy[k]=0;
for (i=n-1; i>=0; i--)
{
for (k=0; k<n; k++)
z[k]=0;
for (j=n-1; j>=0; j--)
{
k=x[i]*y[j]+z[j];
z[j-1]=k/10;
z[j]=k%10;
}
for (j=i; j<n-1; j++)
Inc10(z);//циклический сдвиг влево согласно разряду числа
output_(z);//промежуточный вывод
copy(xy, xy+n, tmp);//делаем копию массива, т.к. суммирование перезаписывает данные
summa(tmp, z, xy);//складываем промежуточные значения
}
}

int main(int argc, char *argv[])
{
input_(a);
input_(b);
cout<<"--------------------"<<" Slojenie \n";
output_(a);
output_(b);
cout<<"--------------------"<<" Rezultat \n";
summa(a, b, c);//сумма
output_(c);
cout<<endl<<endl;
output_(a);
output_(b);
cout<<"--------------------"<<" Umnojenie \n";
proizv(a, b, c);//умножение
cout<<"--------------------"<<"Rezultat\n";
output_(c);

}

Комментарии

Популярные сообщения из этого блога

Нахождение сильно связных компонентов в графе (python)

СЛАУ - метод Гауса (С++)