【问题标题】:How to store a very big number in C如何在C中存储一个非常大的数字
【发布时间】:2021-09-19 16:45:44
【问题描述】:

所以我对 C 相当陌生,但我试图存储一个非常非常大的数字。我不能告诉你确切的数字,因为它取决于用户的输入。但是我试图找到一种方法来使用 BigInt 以 java 或 python 的方式存储一些东西。

我也想像 int 一样处理它。 (比如用它做数学方程式)

我尝试使用 C 中的每一种数据类型都没有成功。

请帮忙

编辑:这是我用java编写的加密算法。如果您访问 github 链接(https://github.com/N0tA1dan/Krypton),您可以看到我处理的数字有多大。现在我正在尝试用 C 编写算法

【问题讨论】:

标签: c types numbers bigint


【解决方案1】:

在 C 编程中,用户可以输入的 64 位最长值是 long 类型(8 字节),范围从 -9223372036854775808 到 9223372036854775807。 希望我能帮到你;)

【讨论】:

  • 使用unsigned long long,你可以比18 446 744 073 709 551 615更远一点,但对于密码算法来说可能不够长。
【解决方案2】:

如果你想在一个变量中存储一个数字,最大的一个是 long long,你可以存储到 +18,446,744,073,709,551,615 但如果你想更高,你可以输入数字并以字符串的形式存储,例如看看这个代码(它支持最多 max_number 位数):

,,,

#include<stdio.h>
#include<string.h>
#define max_number 200
int main()
{
    char arr[max_number];
    scanf("%s",&arr);
    int len_digit=strlen(arr);  // calculate number of digits
    /*
    arr[len-1]=first digit
    arr[len-2]=second digit
    .
    .
    .
    .
    arr[0]=last digit
    */
    return 0;
}
    

,,, 如果你想使用数字,你应该将数组从字符类型转换为整数 为此,您可以将 arr[i] (i from 0 to len-1) 减去 48,因为 '0' 的 Ascii 代码是 48,它排序为 '9' = 57,然后您可以进行数学计算

请记住,对于每个计算,您都应该构建一个传递 2 个数组并按索引进行数学计算的函数

【讨论】:

    猜你喜欢
    • 2015-06-30
    • 2013-10-13
    • 2022-08-15
    • 1970-01-01
    • 2022-06-15
    • 2011-07-21
    • 2019-08-07
    • 1970-01-01
    • 2017-04-08
    相关资源
    最近更新 更多