c - C中的最大数字数据类型

标签 c types numbers

所以我编写了一个简单的 C 程序,它根据用户指定显示第 n 个斐波那契数。我开始使用整数,显然效果不太好,所以我开始使用 float 、多头,最后是多头。即使有很长的多头,也有一个截止点,我得到无意义或不正确的输出,例如负数(在 n = 100 之前开始发生)。我能做些什么来扩大这个程序的范围,还是没有办法解决这个问题?

#include <stdio.h>
#include <stdlib.h>

int main()
{
  long long term = 0;
  long long val = 0;
  long long first = 0;
  long long second = 1;

  printf( "Which fibonacci term (starting at 0) would you like to see? ");
  scanf("%lld", &term );

  if( term == 0 )
  {
    printf("%lld\n", first );

    return 1;
  }

  if( term == 1 )
  {
    printf( "%lld\n", second );

    return 1;
  }

  if( term > 1 )
  {  
    for( int i = 1; term > i; i++ )
    {
      val = first + second;

      first = second;
      second = val;
    } 

    printf( "%lld\n", val );

    return 1;

  }

  return 0;

}

最佳答案

根据 ISO C99,long long 至少为 64 位 - 具有最大尺寸的标准整数数据类型。您的编译器可能允许更大的类型,这些由 intmax_t 定义和 uintmax_t<stdint.h> .

但是,我强烈建议使用 GMP 等 Bigint 库。 使用 GMP,长整数和 float 的唯一限制是系统上可用的资源。

关于c - C中的最大数字数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24091937/

相关文章:

mysql - phpmyadmin 号码顺序错误

string - lua中查找字符串中的数字

c++ - 在 malloc 分配的内存之外使用指针的预期行为

haskell - 是什么让 Haskell 的类型系统比其他语言的类型系统多 "powerful"?

c - C 中的隐式数字类型转换

types - Julia 中动态变量和静态变量的区别

string - 将整数转换为lua中的字符串?

c - 需要有 Do/While 循环来使用 NOT 运算符来处理带有 Switch 语句的字符

c - 非法使用类型作为表达式

c - 使用Visual Studio用Oracle 11g开发C程序,但我不知道如何一起设置所有程序