int sum = 0
int subSum = 1
for (int i = 1i <= 20i++) {
subSum *= i
System.out.println(i + "的阶乘: " + subSum)
sum += subSum
}
System.out.println("总和为: " + sum)
}
运行结果:
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的阶哗猛谈乘: -288522240
18的阶乘: -898433024
19的阶乘: 109641728
20的阶乘: -2102132736
总和为: 268040729
请注意,从 "17的阶乘: -288522240" 开始,后面阶乘已经超出整数最值了,所以需要改成使用long类型来保存.
正确程序如下:
public static void main(String[] args) {
long sum = 0
long subSum = 1
for (long i = 1i <= 20i++) {
subSum *= i
System.out.println(i + "的阶乘: " + subSum)
sum += subSum
}
System.out.println("总和为: " + sum)
}
正确程序结果:
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
总和为: 2561327494111820313
你可以用吵槐数组实现大数阶乘,另外你打印数的方法不好
int stack[1024],top = 0
while(m)
{
stack[top++] = m%10000
m/=10000
}
printf("%d",stack[--top])
while(--top!=-1)
printf("旁碧,%.4d"升启友,stack[top])
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)