计算阶乘ñ!
主题: 编写一个程序,计算出n! với n là số tự nhiên không âm nhập vào từ bàn phím
Để làm được bài này, 首先,你需要记得式N! 有. 根据定义,我们有阶乘:
- 0! = 1
- ñ! = 1.2.3…ñ
Vậy là ta có công thức rồi. 看着我们用正看到公式= 0 这很容易, 如果n> 0 thì nó là tích các số từ 1 到n. Vậy chúng ta có thể dùng 环 để tính dễ dàng 🙂
/* * Calculate n! */ #include <stdio.h> int main() { int i, n; int fact = 1; printf("Enter n = "); scanf("%d", &n); for(i = 1; i <= n; i++) { fact = fact * i; } printf("%d! = %d\n", n, fact); return 0; }
Khá dễ dàng. Tuy nhiên các bạn để ý một chút kẻo nhầm.
- Tại sao chúng ta lại gán giá trị ban đầu cho biến fact (Factorial) 是 1 这不是 0 hoặc số khác? Đơn giản vì nếu gán fact = 0 thì fact luôn là 0 的 0 乘以数目是 0.
- 我们为什么不检查代码的情况下,N = 0 ? 因为在我们的循环变量i从运行 1 到n. 如果n = 0 然后当然的循环将不会运行一次,然后我们的事实仍然 1. 因此,该程序仍然是正确的
返回考虑小NHE. 您尝试输入n是 20 或大于看看会发生什么? 您将看到结果是错误的或者返回一个负数是. 之所以? 您注意,由于人类连续阶乘的性质,以便其结果会增加非常快. 5! = 120 但 6! = 720 走了. 因此,我们的事实将快速增长使数据类型 (INT) 我们是无法遏制 (你可以看到 数据类型的有限范围). 因此,我们需要改变的数据类型. ñ根据其中我们估计,我们使用的数据类型的大小是什么类型. 您可以使用 长 或 很长很长 对于所有的阶乘NHE.
/* * Calculate n! */ #include <stdio.h> int main() { int i, n; long long fact = 1; printf("Enter n = "); scanf("%d", &n); for(i = 1; i <= n; i++) { fact = fact * i; } printf("%d! = %lld\n", n, fact); // lld for long long return 0; }
如果以此推算, 20!. 而下面的结果:
Enter n = 20 20! = 2432902008176640000
20! 有一些非常大的.
编写一个程序,计算出n! 通过递归. 对于非负整数n从键盘输入
除了使用环出, 我们可以使用递归函数与大自然来计算阶乘. 你有没有注意到公式为我们的阶乘.
- 0! = 1
- ñ! = 1.2.3…N = N。(N-1).(N-2)…2.1 = N。(N-1)!
指N! = N。(N-1)!. 在阶乘定义有阶乘, 它相当于递归 – 记得函数的主要功能. 我们可以写出如下程序:
/* * Calculate n! by recursive */ #include <stdio.h> long long fact(int n) { if(n == 0) return 1; return n * fact(n-1); } int main() { int n; printf("Enter n = "); scanf("%d", &n); printf("%d! = %lld\n", n, fact(n)); return 0; }
您可以参考这里约 使用功能和递归函数.
锻炼: 编写显示程序 1!, 2!, 3!,…, 20! 同时. 每行显示一些.
muốn tính 200! 那么如何?
你学习了大量NHE.
E弦可以学习,但很难过. 使用的字符串应用与爵士的算法.
你可以在这里看到: https://cachhoc.net/2013/08/27/cc-tinh-toan-voi-so-lon/
如何计算这个问题
S = 1+1/2!+1/3!+…..+1/ñ!
1/2 是一个分数
您需要使用循环来计算阶乘, 然后使用循环计算如上的数字序列.
我想计算n! 模( 10 ^ 5) 怎么样了