gpt4 book ai didi

c++ - 显示非常大的数字,由 byte[] 表示

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

这是一个有点荒谬的问题,我已经思考了一段时间,但是假设我想显示一个非常非常大的数字,一个不能用普通基元(或组合)表示的数字原语...没有long long ...),所以我想可以使用内存中的字节数组。

如果我有一个 n 字节(其中 n 很大)长度的字节数组,我怎样才能正确打印字节数组,就好像它是一个以 10 为底的十进制整数。一个解释而不是一个答案将是首选。

最佳答案

最简单(实现和理解)的是将数字重复除以 10,收集余数,示例:

1234/10 = 123, 4
123/10 = 12, 3
12/10 = 1, 2
1/10 = 0, 1

然后打印余数(以相反的顺序)。

将字节序列除以 10 时,您从最高有效字节开始单独划分每个字节。然后将除法的余数带到下一个字节,直到处理完所有字节。

int divBytesBy10(unsigned char* bytes, size_t count, unsigned char* remainder)
{
unsigned carryOver = 0;
int nonZeroQuotient = 0;

while (count--)
{
carryOver = carryOver * 256 + *bytes;
*bytes = carryOver / 10;
carryOver %= 10;

nonZeroQuotient |= *bytes++;
}

*remainder = carryOver;
return nonZeroQuotient;
}

一个完整的例子:

#include <stdio.h>

int divBytesBy10(unsigned char* bytes, size_t count, unsigned char* remainder)
{
unsigned carryOver = 0;
int nonZeroQuotient = 0;

while (count--)
{
carryOver = carryOver * 256 + *bytes;
*bytes = carryOver / 10;
carryOver %= 10;

nonZeroQuotient |= *bytes++;
}

*remainder = '0' + carryOver; // convert to ASCII right here
return nonZeroQuotient;
}

int main(void)
{
unsigned char num[] = {0xFF, 0xFF, 0xFF, 0xFF};
char str[11], *p = str + sizeof(str) - 1;
*p = '\0';
while (divBytesBy10(num, sizeof(num), --p)) {}
printf("%s\n", p);
return 0;
}

输出(ideone):

4294967295

关于c++ - 显示非常大的数字,由 byte[] 表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12417030/

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