日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大数(小于10000)N的阶乘准确值(效率)

發(fā)布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大数(小于10000)N的阶乘准确值(效率) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?51Nod - 1057


對結(jié)果進(jìn)行切分,切分的寬度可以是 4、5 ,6,7,8.。

把結(jié)果存入 a[100000];? 這個數(shù)組中 ,假設(shè)每個元素存的是結(jié)果的5位,那么這個數(shù)組就能存 500000 位的數(shù),絕對足夠大。

比如? 10 != 3628800.。

那么在數(shù)組 a [] 的儲存情況是? a [ 0 ] = 28800,,a [ 1 ] = 36..

再比如? 一個數(shù)是 1 0 9 8 7 6 5 4 3 2 1? .。它的儲存情況是。。a [ 0 ] = 54321 ,a [ 1 ] = 09876 , a[ 2 ] = 1....

運算的時候就像大數(shù)相乘,每個元素都要乘,如果這個元素超過了? 5 位,就進(jìn)位,加到下一個元素上,

以此類推。。

最后從后往前輸出數(shù)組。

要注意的是,如果 分割的寬度是 5 ,除了數(shù)組最后的元素不確定是不是 5 位, 其它的輸出都要 “%05d”。。!!

#include <cstdio> #include <algorithm> #include <iostream>using namespace std;int a[100000]={1,0}; int n,i,c,len,j;int main() {scanf("%d",&n);len = 1; // len 是用來記錄 a 中有幾個元素。 for (i = 2;i <= n; ++ i){c = 0; // c 是 進(jìn)位的 數(shù)for (j = 0;j < len;++ j){a[j] = (a[j] * i + c ); // 注意每次乘都要 +c(加上 上次進(jìn)位的數(shù))c = a[j]/100000; //如果運算結(jié)果小于 5 位,c 是為 0的。a[j] %= 100000; // 保證每個元素存5 位數(shù)}if(c > 0) // 經(jīng)過個循環(huán),如果 c > 0 了,就說明超過了5位,要進(jìn)位{a[j] = c; // a 新增個元素存進(jìn)位的數(shù)++len; // 那么就需要 len ++,記錄元素的個數(shù)。。}}printf("%d",a[--len]); // 先輸入最高的幾位,不確定有多少,也不用管。while(len)printf("%05d", a[--len]); // 后面的都是 5 位,注意格式。printf("\n");return 0; }

總結(jié)

以上是生活随笔為你收集整理的大数(小于10000)N的阶乘准确值(效率)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。