c - C 程序中使用的适当数据类型

标签 c types

我正在尝试运行一个程序,该程序对大数的阶乘(比如 50!;即 3.041e+64 - 巨大!)执行某些操作,因此不适合我所使用的正常 int 数据类型知道(unsigned long long int 等)

我使用哪种数据类型来存储这些值?

P.S 我试图找到阶乘中的尾随零。以下是我的方法:

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

int FactorialFinder(int a)
{
    if (a>1)
    a= a* (FactorialFinder(a-1)) ;

    return a;
}


int main()
 {
  printf("Enter number \n");
  int num ;
  scanf("%d",&num) ;
  printf("number is %d\n",num);

  printf("Factorial is %d",(num = FactorialFinder(num))) ;

int x=0, count = 0 ;

while(num>0)
{
    x = (num%10) ;
    if (x == 0)
        count++ ;
    else
        break;

    num= num/10 ;
}

printf("\nNumber of trailing zeroes is %d",count) ;
getchar() ;
return 0;
}

12 以内都可以正常工作!超过这个值,结果就会错误(从 17 开始,它开始返回负阶乘值(?),从 34 开始,它给出 0),我猜测是由于数据类型问题。有人可以帮我吗?

最佳答案

嗯,这些类型的数字不能正确地存储为单个数字,正如您所推断的没有数据类型来保存它们一样。处理大数的最佳方法是将它们存储为 int 类型或 char 类型的数组。

例如,您可以将 1234567898765 存储为数组 int big[14],其中,

big[0]=1
big[1]=2
.
.
.
big[13]=5  //last element
big[14]=-1 //to mark the end of number...

或者以相反的顺序,将-1作为最后一个元素(选择对您的实现方便的选项)

<小时/>

现在是具有挑战性的部分,您必须创建用于加法、减法、乘法和您需要的其他运算的函数..有很多方法可以实现这些函数..尝试一下..或者您可以查找如何做到这一点,这是一个来源:click

这提供了最多 100 位数字的算术数字的实现,但是您可以尝试构建一个可以处理更大数字的算术数字:)

关于c - C 程序中使用的适当数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37690347/

相关文章:

types - 什么时候将数字文字分配给默认类型?

mysql - MySQL 如何存储枚举?

types - 在 LLVM 中定义新类型

typescript - 在 Typescript 中,为数组定义一个类型,其中第一个元素比其余元素更具体

c - OpenMPI 阻塞接收数组无法正常工作(在某些情况下程序不会停止)

c - 具有十进制输入的递归函数以二进制形式打印从零到 n 的所有数字

c - C中字符数组的位操作

c - 如何从头开始重复 c 程序并清理屏幕和第一个输入值?

c++ - 如何使用 Qt 类编译 rpcgen 文件?

Python:使用字符串作为对象参数?