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

问题描述 投票:0回答:2

我需要得到一个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;
     }
c types overflow
2个回答
3
投票

没有可以容纳 99 位整数的 inter 类型,因此你不能

scanf
它。

最大的数字

gcc
(但它不是标准C)可以处理整数是128位长。但是你可以存储的最大数量是
170141183460469231731687303715884105727
,这太短了。

所以答案是:你不能用

scanf
来扫描99位长整数

唯一的方法是作为字符串读取,然后使用像 GMP

这样的库

0
投票

谢谢大家的帮助,解决了:) 我使用字符串和 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;
     }
© www.soinside.com 2019 - 2024. All rights reserved.