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