如何在c语言中通过scanf得到一个99位的整数?

mwecs4sa  于 2023-04-05  发布在  其他
关注(0)|答案(2)|浏览(118)

我需要得到一个99位的整数。这实际上是我需要得到一个99位的整数来解决的问题:https://quera.org/problemset/9774/
这是我的代码来解决这个问题,但它应该能够得到更大的数字:

#include <stdlib.h>
int main(){
    long long int n;
    scanf("%lld",&n);
    long long int x=n;
    int i=1;
    while(x>=10){
        x=x/10;
        i++;
    }
    long long int ar[i];
    x=i-1;
    while(x>=0){

        ar[x]=n%10;
        n=n/10;
        x--;
    }
    x=0;
    int z=1;
    while(x<=i-1){

        printf("%d: ",ar[x]);
        while(z<=ar[x]){
            printf("%d",ar[x]);
            z++;
        }
        z=1;
        x++;
        printf("\n");

    }
   
    return 0;
     }
lyfkaqu1

lyfkaqu11#

没有一个可以保存99位整数的inter类型,因此你不能scanf它。
gcc(但它不是标准的C语言)可以处理的最大整数是128位长。但你可以存储的最大数字是170141183460469231731687303715884105727,这太短了。
所以答案是:不能使用scanf扫描99位长整数
唯一的方法是作为字符串读取,然后使用像GMP这样的库

bvhaajcl

bvhaajcl2#

感谢每一个人的帮助.它解决了:)我用字符串和strlen函数而不是整数.这个新的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
    char n[99];
    scanf("%s",&n);
    int i =strlen(n);

   int x=0;
    int z=1;
    while(x<=i-1){
        int a=n[x]-48;
        printf("%d: ",a);
        while(z<=a){
            printf("%d",a);
            z++;
        }
        z=1;
        x++;
        printf("\n");

    }

    return 0;
     }

相关问题