有类似的问题,但没有帮助我找到我要的答案,所以我来寻求帮助!
同时,这是一份作业,所以我更希望得到解释而不仅仅是可用代码。
我需要打印两列或四列输出来显示1-20的阶乘。
我很接近了,只是似乎无法弄清楚如何使这两个部分并排。
代码:
同时,这是一份作业,所以我更希望得到解释而不仅仅是可用代码。
我需要打印两列或四列输出来显示1-20的阶乘。
我很接近了,只是似乎无法弄清楚如何使这两个部分并排。
代码:
lngFactorial = 1;
// Factorials 1 - 10
for (intIndex = 1; intIndex <=10; intIndex += 1)
{
lngFactorial *= intIndex;
printf("%d! = %-20lu \n", intIndex, lngFactorial );
}
// Factorials 11 - 20
for (intIndex = 11; intIndex <= 20; intIndex += 1)
{
lngFactorial *= intIndex;
printf("%20d ! = %lu \n", intIndex, lngFactorial);
}
输出:
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 ! = 1932053504
14 ! = 1278945280
15 ! = 2004310016
16 ! = 2004189184
17 ! = 4006445056
18 ! = 3396534272
19 ! = 109641728
20 ! = 2192834560
那么,这是4列,我需要想办法打印出来。
1! = 1 11! = 39961800
我在printf中有什么错过了吗?
非常感谢任何指导。
13! == 0x17328CC00
。而x7328CC00 == 1932053504
。OP 需要在所有计算中从int
切换到long long
,并使用%ll
作为 printf 的格式参数,而不是%d
。 - selbie13!
的值为6227020800
(十进制)。在十六进制中,它写成了 9 个十六进制数字:17328CC00
,其中每个数字代表 4 位。因此,32 位数字不能超过 8 个十六进制数字。所以当发生溢出时,结果会被计算为overflow % 2^32
,这相当于从那个 9 位十六进制字符串中删除前导数字。 - selbie