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

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

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

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

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

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

语言:C。

有帮助吗?

解决方案

最大标准整体数据类型是unsigned long long int - 1.8 * 10 ^ 20这是不够的你,所以你需要创建自己的类型(结构或 - 我的系统(32位x86上的Linux),它具有范围0上阵列)和写基本的数学(基本上只需针对该类型的加成)。

如果我是你(和内存是不是一个问题),我会用一个数组 - 每个十进制数字而不是BCD一个字节。 BCD更加紧凑,因为它存储每个字节小数点后2位,但是你需要把更多的精力用单独高和低半字节的工作。

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

其他提示

我强烈建议使用诸如 良好生产规范 (GNU 多精度库)。您可以使用 mpz_t 大整数的数据类型,各种 导入/导出例程 将您的数据放入 mpz_t, ,然后使用 mpz_out_str() 以 10 为基数打印出来。

好了,从二进制转换为十进制的时候,你真的不需要在同一时间所有二进制位。你只需要当前正在计算的力量,可能是一个双变量来保存结果的位。 你可以把二进制值在阵列中,可以说,我[64],通过它进行迭代,得到根据其位置的功率,并保持其添加到双

转换为十进制真装置计算十每个功率,那么,为什么不只是存储这些在字节数组?然后印刷只是通过阵列循环。

你不能分配,比如说,5倍INT的内存,并保存你的号码在数组的开始?然后在INT大小的块的阵列上手动迭代。也许是这样的:

int* big = new int[5];
*big = <my big number>;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top