【问题标题】:How can I input very large numbers(more than 200 digits) in C? [duplicate]如何在 C 中输入非常大的数字(超过 200 位)? [复制]
【发布时间】:2016-10-09 12:38:57
【问题描述】:

我想在C中输入非常大的数字。我还想计算它的数字之和。有没有办法输入非常大的数字?

这是我的代码。

#include<stdio.h>
main() {
    int sum=0,rem;
    int a;
    printf("Enter a number:-");
    scanf("%d",a);
}

【问题讨论】:

    标签: c bignum


    【解决方案1】:

    您可能不想将所有这 200 位数字加载到内存中。如果您只想计算数字的总和,那么您在程序中所需要的只是一些存储数字总和的累加器变量到目前为止。这个变量的类型可以是int,因为200 * 9 &lt;= INT_MAX在符合C的实现中总是为真。

    #include <stdio.h>
    
    int main(void) {
        int accumulator = 0;
        int read_result;
    
        printf("Enter a number:-");
    
        while (1) {
            read_result = fgetc(stdin);
    
            if ('0' <= read_result && read_result <= '9') {
                accumulator += read_result - '0';
            } else {
                break;
            }
        }
    
        printf("The sum of the digits is %d", accumulator);
    
        return 0;
    }
    

    【讨论】:

    • 非常感谢您的解释...:)
    【解决方案2】:

    ANSI C C99 中的最大类型是 int 的 long long int。没有办法在 C 中直接使用 200 位数字,除非您将其视为 char * 并对其进行处理。

    抱歉,您显示的基本代码 sn-p 和您想要达到的目标真的非常遥远……如果您再具体一点,您想要什么样的计算可能会给您一只手左右。

    【讨论】:

    • 啊..真的..?其实我想得到一个大数的数字总和..有没有简单的方法得到它?
    • 当然:如告知的那样,您可以例如 scanf("%d",&a) 并将其相加直到达到 EOF,或者另一种方式将获取指向内存的指针中的所有数字,然后开始总结所有这些。
    • @GayanthaAkalanka "我想得到一个大数的数字总和" - 非常 重要的细节属于你的问题;没有埋在下面的评论中。如果这是 only 目标(数字总和),那么您不需要大数字库。您需要做的就是一次读取一个字符,只要它们是数字字符,就将它们从0..9 转换为int,并将它们计算为一个运行总和。更新您的问题它的标题。
    【解决方案3】:

    有限制。有些编译器只有一个 64 位的整数,有些是 128 位的。所以你不能使用这些整数类型。

    您可以尝试使用GMP library。 GMP 支持使用 2^37 bits 构建 64 位整数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多