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



我需要得到一个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;
}

没有可以容纳99位整数的inter type,因此不能scanf

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

所以答案是:你不能使用scanf扫描99位长整数

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

这样的库。

感谢大家的帮助。它解决了:)我使用字符串和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;
}

最新更新