正确答案:
#include <iostream> using namespace std; int main() { int n; cin >> n; long long factorial = 1; // write your code here...... for(int i=1;i<=n;++i) { factorial*=i; } cout << factorial << endl; return 0; }
错误答案问题分析:
#include <iostream> using namespace std; int main() { int n; cin >> n; long long factorial = 1; // write your code here...... int i; for(i=1;i<=n;++i) { i*=(i+1); } factorial=(long long)i; cout << factorial << endl; return 0; }
1.题目提供的factorial就是用来计算阶乘的变量。所以在整个计算中保证使用的是他这个类型,而不是计算完后把数据强转。
2.for(int i = 0; i<=n;++i)
进入循环时先初始化一个变量i。
开始执行循环体中的语句,此时为 i*=(i+1) 这时候i=2
循环体中语句结束,进入第二次循环前执行++i 这时候i=3
开始第二次循环:i=3
i*=(i+1) 这时候i=12
++i 这时候i=13
所以问题在于并没有正确搞清楚for循环的执行顺序。