用c代码在数组中加两个大数

问题描述 投票:0回答:1

我想在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。

EDIT1:最高进位被丢弃。结果保存在数组a中。

EDIT2:将“字节”替换为“进位”。

原始代码是:

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);
c add
1个回答
0
投票

(至少有一个错误。看下面的代码:

void add_one(unsigned char *arr, unsigned int len)
{
    int i;
    for (i = len-1; i >= 0; --i)
    {
        arr[len] += 1;        // Indexing using len is wrong
        if (arr[len] != 0)    // Indexing using len is wrong 
            return; 
    }
}

您可能想使用i作为索引。

© www.soinside.com 2019 - 2024. All rights reserved.