Текст программы

#include <iostream>

#include <string.h>

using namespace std;

 

void dopcod(unsigned char *d,int n)

{

int j;

int i;

bool f=true;

for(i=n-1;i>=0;i--)

{

if ((d[i]!=0x00)&&(f))

{

 

d[i]=0x100-d[i];

f=false;

j=i;

}

if ((!f)&&(i!=j))

d[i]=0xFF-d[i];

}

}

 

bool summa(unsigned char *s1,unsigned char *s2,unsigned char *s3,int n)

{

if (s1[0]==0xFF)dopcod (s1,n);

if (s2[0]==0xFF)dopcod (s2,n);

int i;

unsigned char y=0x00;

for(i =(n-1);i>=0 ; i--)

{

s3[i]=s1[i]+s2[i]+y;

if ((s1[i]+s2[i]+y)>255) y=0x01;

else y=0x00;

}

if (s3[0]==0xFF) dopcod (s3,n);

 

if ((s3[0]==0x00)||(s3[0]==0xFF)) return true;else return false;

 

}

 

void main()

{ //unsigned char m1[6]={0x00,0xCC,0x4F,0xA3,0xD7,0x95};

//unsigned char m2[6]={0x00,0xE4,0x7D,0xC6,0xBB,0x3A};

unsigned char m1[6]={0xFF,0xF0,0x00,0x00,0x00,0x00};

unsigned char m2[6]={0x00,0x00,0x00,0x00,0x00,0x01};

// unsigned char m1[6]={0x00,0x23,0xCB,0x92,0xC9,0x6E};

//unsigned char m2[6]={0x00,0x12,0xB5,0x61,0xD3,0xE5};

unsigned char result[6];

int k=6;

bool H=summa(m1,m2,result,k);

if (H==true&&result[0]==0xFF) dopcod (result,k);

cout<<result;

}

 

6.Анализ результатов и выводы

Объем разработанной программы алгебраического сложения двух целых чисел, каждое из которых представлено массивом байтов, вместе с технологической частью, выполняющей ввод исходных данных и вывод результатов, составляет 1,6 Мбайт. Время работы программы в количестве операций алгебраического сложения при учёте переполнений и при условии, что количество разрядов исходных чисел равно n в лучшем случае равняется 2n, а в худшем 5n-1.