基於aoj 787和51nod 1057討論n的階乘問題。
在這裡,討論的大數階乘的演算法主要是模擬乘法運算,我們用乙個乘數和另乙個乘數各位相乘,則該乘積的個位為結果的一位,該乘積的高位均為進製。需要注意的是,各位乘完後,進製可能是個多位數,則該多位數可以直接輸出。我們可以設定乙個陣列w[k],來儲存乘數和乘積(二者共用)。
模板如下:
while(迴圈條件)
a=w[k]*p+m;
w[k]=a%10;
m=a/10;
}aoj787:
c. 階乘中找數
time limit: 1000 ms case time limit: 1000 ms memory limit: 64 mb
total submission: 16 submission accepted: 10
description
問題描述:統計n階乘中數字p的個數
input
多組資料,每組資料只有一行,為兩個正整數n,p (n<=800,0<=p<=9)
output
輸出為兩行,一行為n!, 另一行為n! 中數字p的個數
sample input
original
transformed
10 8sample output
original
transformed
3628800ac**:2
#include int main()
while(m>0)
}s=0;
for(i=k;i>=0;i--)
printf("\n%d\n",s);
}return 0;
}
1057 n的階乘
輸入n求n的階乘的準確值。
input
輸入n(1 <= n <= 10000)output
輸出n的階乘input示例
5output示例
120該題的n給到了10000,若按照原有方式模擬必然超時,因此需要優化。優化方式是將大數切段儲存,具體切成幾位一段可隨意,題主在ac時切成5位一段。
ac**:
#include int main()
if(m>0)
}printf("%d",w[k]);
for(i=k-1;i>=0;i--)
printf("%05d",w[i]);
printf("\n");
}return 0;
}
N的階乘 大數運算
題目位址 description given an integer n 0 n 10000 your task is to calculate n one n in one line,process to the end of file.for each n,output n in one line...
N的階乘 大數階乘
輸入n求n的階乘的準確值。input 輸入n 1 n 10000 output 輸出n的階乘 首先,要確定n的階乘的數字大概有多少位,這樣便於我們去選擇合適的演算法。階乘 當n 10000時,上式值為35660 已經向上取整 所以接受 include include include include ...
大數運算之階乘
int 代表有符號整數,也就是說,用 int 宣告的變數可以是正數,可以是負數,也可以是零,但是只能是整數。標準規定 int 的最小取值範圍是 32767 到 32767。int 的取值範圍因機器而異,但是一定要大於或者等於 32767 到 32767。一般來說,int 占用乙個字的記憶體空間。因此...