将真正的大数字从二进制转换为十进制并打印出来

我知道如何将二进制转换为十进制。 我知道至少2种方法:桌子和电源;-)

我想将二进制转换为十进制并打印此十进制。 而且,我对这个“十进制”不感兴趣; 我想要打印它。

但是,正如我上面所写,我只知道将二进制转换为十进制的两种方法,并且它们都需要添加。 所以,我在二进制中计算1或0的某个值,并将其添加到记忆值。 这是一个很薄的地方。 我有一个非常大的数字(1和64个零)。 转换时我需要在某些“变量”中放置一些中间结果。 在C中,我有一个`int’类型,它只有4个字节,不超过10 ^ 11。

因此,在从二进制转换为十进制时,我没有足够的内存来存储中间结果。 正如我上面写的那样,我对这个十进制不感兴趣,我只想打印结果。 但是,我没有看到任何其他方法来解决它;-(是否有任何解决方案从二进制“只打印”?

或者,也许,我应该使用类似BCD(二进制编码的十进制)的东西进行中间表示? 我真的不想使用这个,因为它不是那么跨平台(英特尔的处理器有内置function,但对于其他我需要编写自己的实现)。

我很高兴听到你的想法。 谢谢你的耐心等待。

语言:C

最大的标准整数数据类型是unsigned long long int – 在我的系统上(x86上的32位Linux)它的范围是0 – 1.8 * 10 ^ 20,这对你来说还不够,所以你需要创建自己的类型(struct或数组)并为该类型编写基本数学(基本上你只需要一个补充)。

如果我是你(并且内存不是问题),我会使用一个数组 – 每个十进制数字一个字节而不是BCD。 BCD更紧凑,因为它每个字节存储2个十进制数字,但你需要花费更多的精力分别处理高和低半字节。

要打印你只需将'0' (字符,而不是数字)添加到数组的每个字节,你就会得到一个可打印的字符串。

我强烈建议使用GMP (GNU multiprecision库)等库。 您可以将mpz_t数据类型用于大整数,使用各种导入/导出例程将数据导入mpz_t ,然后使用mpz_out_str()将其打印在基数10中。

好吧,当从二进制转换为十进制时,您实际上并不需要同时使用所有二进制位。 你只需要你正在计算功率的位数,并且可能需要一个双变量来保存结果。 你可以把二进制值放在一个数组中,让我们说[64],迭代它,根据它的位置获得能力并继续将它加到double中。

转换为十进制实际上意味着计算每个10的幂,那么为什么不将它们存储在一个字节数组中呢? 然后打印就是循环遍历数组。

难道你不能为5个int分配内存,并将数字存储在数组的开头? 然后以int大小的块手动迭代数组。 也许是这样的:

 int* big = new int[5]; *big = ;