Я хочу построить два больших числа по массиву в программировании на c и добавить их.
Ниже приведен мой код:
void add(unsigned char* a, unsigned char* b, unsigned int len)
{
int i;
unsigned short T;
unsigned char carry = 0;
for (i = len - 1; i >= 0; --i)
{
T = (unsigned short)(a[i]) + (unsigned short)(b[i]) + (unsigned short)carry;
//T = a[i] + b[i] + carry;
if (T > 0xFF)
carry = 1;
else
carry = 0;
a[i] = (unsigned char)T;
}
}
Максимальное значение в массиве a и b длякаждый элемент 255.
РЕДАКТИРОВАТЬ1: самый высокий перенос сбрасывается. Результат - сохранение в массиве a.
EDIT2: заменить «Byte» на «carry».
Исходный код:
Integer B1(B, SM3_BLOCK_SIZE);
++B1;
for (i = 0; i < ILen; i += v)
(Integer(I + i, v) + B1).Encode(I + i, v);
Я пишу две новые функции,Один как выше add()
, другой выглядит следующим образом:
void add_one(unsigned char *arr, unsigned int len)
{
int i;
for (i = len-1; i >= 0; --i)
{
arr[len] += 1;
if (arr[len] != 0)
return;
}
}
Если мой код является правым, исходный код будет следующим:
add_one(B, SM3_BLOCK_SIZE);
for (i = 0; i < ILen; i += v)
add(I + i, B, SM3_BLOCK_SIZE);