C 如何打印一个巨大的数字?
我正在写一个程序来打印斐波那契数,比如C 如何打印一个巨大的数字?,c,numbers,C,Numbers,我正在写一个程序来打印斐波那契数,比如 0 1 1 2 3 5 8 21 .... 最后一个数是前两个数的和 我认为这很容易,但意识到你必须打印一个巨大的数字,如 117669030460994 它超过了C中所有可用类型的数字的大小(刚刚检查过,远远超过) 那么,我怎么能存储和打印这么大的数字呢?我不久前写了一个类似的程序,它处理斐波那契序列的无符号长整数。我不确定它的效率有多高,因为我使用了一个数组来存储数字 我还使用了%I64d格式说明符来打印巨大的64位整数,因为
0 1 1 2 3 5 8 21 ....
最后一个数是前两个数的和
我认为这很容易,但意识到你必须打印一个巨大的数字,如
117669030460994
它超过了C中所有可用类型的数字的大小(刚刚检查过,远远超过)
那么,我怎么能存储和打印这么大的数字呢?我不久前写了一个类似的程序,它处理斐波那契序列的
无符号长整数。我不确定它的效率有多高,因为我使用了一个数组来存储数字
我还使用了%I64d
格式说明符来打印巨大的64位
整数,因为我使用的是windows。但我认为如果您使用linux,那么%llu
就可以了
正如@M Oehm在评论中指出的那样,使用uint64\u t
from也是声明无符号long
的另一种方式
这就是它看起来的样子:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define MAX 100
int
main(void) {
int i, range;
unsigned long long array[MAX];
/* or uint64_t from <stdint.h> */
printf("Enter number range: ");
if (scanf("%d", &range) != 1) {
printf("invalid number\n");
exit(EXIT_FAILURE);
}
array[0] = 0;
array[1] = 1;
for (i = 2; i < range; i++) {
array[i] = array[i-1] + array[i-2];
}
printf("Fibonacci Series is: ");
for (i = 0; i < range; i++) {
printf("%I64d ", array[i]);
}
return 0;
}
#包括
#包括
#包括
#定义最大值100
int
主(空){
int i,范围;
无符号长数组[MAX];
/*或从*/
printf(“输入数字范围:”);
如果(扫描频率(“%d”,&范围)!=1){
printf(“无效数字\n”);
退出(退出失败);
}
数组[0]=0;
数组[1]=1;
对于(i=2;i
您想要的是bignums,又称bignums。值得注意的是,有几个库可以实现这一点。您将能够计算数千(甚至数百万)位数的大型斐波那契数
请注意,bignum算法很难有效地实现。所以不要重新发明轮子,你会想到的几个简单的算法比最先进的算法效率要低。使用现有的库(通常会使用一些像“带进位的加法”这样的库来加速这种操作)。使用更大的打印机?确保它不会超过无符号长
,它最多允许18446744073709551615
。查看:和。64位无符号整数可以存储F93。