C 使用哪种类型的整数来表示19位数字

C 使用哪种类型的整数来表示19位数字,c,C,我的代码有问题。 我必须做一个计算,但是当一个特定的数字变大时,它不会打印正确的答案,我现在使用的是int。但我不知道这是否是最好的选择 这是我的代码: int faculty(int faculty1) { printf("enter faculty\n"); scanf("%i", &faculty1); //faculty1 is a number from 1 to 20 int i; int fact = 1; for(i=1; i&

我的代码有问题。 我必须做一个计算,但是当一个特定的数字变大时,它不会打印正确的答案,我现在使用的是
int
。但我不知道这是否是最好的选择

这是我的代码:

int faculty(int faculty1)
{

    printf("enter faculty\n");
    scanf("%i", &faculty1); //faculty1 is a number from 1 to 20
    int i;
    int fact = 1;

    for(i=1; i<=faculty1; i++)
    {
         fact *= i;
    }

    return (fact);
}
int学院(int学院1)
{
printf(“输入教员”\n);
scanf(“%i”,&faculty1);//faculty1是1到20之间的数字
int i;
int-fact=1;

对于(i=1;i您可能希望使用
无符号long
来存储19位长的值

最大值为18446744073709551615(2^64-1)或更大*

还要注意,它的格式说明符是
%llu

应该是

scanf("%d", &faculty1);
如果faculty1是包含19位数字的,那么

scanf("%llu", &faculty1);

这将是错误的:

scanf("%i", &faculty1); //faculty1 is a number from 1 to 20
您想使用
%d
,而不是
%i
——假设
faculty1
是一个从1到20的整数,您想计算该整数的阶乘

我假设你不可能计算19位数字的阶乘

即使使用
无符号的long-long
,您也会在某个时刻比您的19位值快得多


请澄清您的问题和您真正想做的事情。

您可以使用
uintmax\t
,它在
stdint.h
中定义,保证是平台上最大的无符号类型。此外,您可以通过
CHAR\u BIT*sizeof(uintmax\t)*log10(2.0)检查它提供了多少位数

以下是需要64位时可以使用的类型列表:

  • long
    由标准保证至少为64位

  • stdint.h
    中定义的任何适当类型。它们的形式为
    int64\u t
    fast64\u t
    至少64\u t
    ,等等。
    int64\u t
    当然是64位宽,其他两个保证至少有64位


对于所有这些类型,也有无符号变体(
unsigned long
,或
uint64\u t
等)。只需选择您最喜欢的一种。

OP明确指出,他希望阶乘最多为20。您可以使用64位int来实现这一点

#include <stdio.h>

int main()
{
    long long fact=1;
    int i;
    for(i=1; i<=20; i++) {
        fact *= i;
        printf("%2d! = %lld\n", i, fact);   
    }
    return 0;
}

这些类型的文档中列出了每种数据类型的大小。为什么要同时使用
c
c
标记此数据类型?不能同时使用这两种数据类型,而且看起来您只是在查找
c
。但是
int
在任何情况下都不起作用……您需要无符号的64位来保存19个十进制数字。您真的要尝试吗计算19位数字的阶乘?你知道阶乘增长有多快,对吗?
无符号长
可以保持该值吗?各位,请仔细阅读代码,看看它试图做什么,然后再建议使用
无符号长
或类似大小的变量。这不仅是错误的答案(错误在别处),这个答案完全忽略了函数其余部分中发生的事情!
#include <stdio.h>

int main()
{
    long long fact=1;
    int i;
    for(i=1; i<=20; i++) {
        fact *= i;
        printf("%2d! = %lld\n", i, fact);   
    }
    return 0;
}
 1! = 1
 2! = 2
 3! = 6
 4! = 24
 5! = 120
 6! = 720
 7! = 5040
 8! = 40320
 9! = 362880
10! = 3628800
11! = 39916800
12! = 479001600
13! = 6227020800
14! = 87178291200
15! = 1307674368000
16! = 20922789888000
17! = 355687428096000
18! = 6402373705728000
19! = 121645100408832000
20! = 2432902008176640000