gpt4 book ai didi

c - 在C代码中通过数组添加两个大数

转载 作者:太空宇宙 更新时间:2023-11-04 06:45:33 25 4
gpt4 key购买 nike

我想在 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);

最佳答案

(至少)有一个错误。看这段代码:

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 作为索引。

关于c - 在C代码中通过数组添加两个大数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58424044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com