4.n的高精度阶乘---优化
生活随笔
收集整理的這篇文章主要介紹了
4.n的高精度阶乘---优化
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目:對于每組測試數(shù)據(jù),在一行中給出一非負(fù)整數(shù)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; //加上退出前進(jìn)位
len++;
}
}
for(int i = len - 1; i >= 0; i--)
cout << a[i];
return 0;
}
總結(jié)
以上是生活随笔為你收集整理的4.n的高精度阶乘---优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (Python)继承
- 下一篇: 水产检测项目edta滴定法测定水的硬度