题目:对于每组测试数据,在一行中给出一非负整数n(n小于等于100)
样例输入
3 5 10
样例输出
6 120 3628800 超时的代码如下:#include <iostream>#include <cstring>using namespace std; int main(){ int n, count = 0; int a[100] = {1}; cin >> n; if(n == 0){ cout << 1; return 0; } for(int i = n; i >= 1; i--){ for(int j = 0; j <= count; j++){ a[j] *= i; } for(int j = 0; j <= count; j++){ if(a[j] > 10){ while(a[j] >= 10){ a[j] -= 10; a[j + 1]++; } } } while(a[count]){ count++; } } for(int i = count - 1; i >= 0; i--) cout << a[i]; return 0;} 上面代码最多只能跑出18的阶乘。下面的代码是可行的:#include <iostream>using namespace std; int main(){ int a[1000] = {1}; int len = 1; int n, q = 0; cin >> n; if(n == 0){ //注意0的阶乘是1 cout << 1; return 0;} for(int i = 1; i <= n; i++){ q = 0; //每次要置零 for(int j = 0; j < len; j++){ a[j] = a[j] * i + q; q = a[j] / 10; a[j] = a[j] % 10; } if(q > 0){ a[len] += q; //加上退出前进位 len++; } } for(int i = len - 1; i >= 0; i--) cout << a[i]; return 0;}
时间: 2024-12-21 13:40:47