[模板] 大数阶乘模板
发布时间:2020-12-14 03:28:35 所属栏目:大数据 来源:网络整理
导读:最近项目工程量大,好像没什么空码代码,抽空写个简单大数阶乘,证明我还没有彻底荒废。。。 #includeiostream#includecmathusing namespace std;int bit[3000];void update(int hbit) // 进位{ for(int i = 0; i = hbit; i++) { if(bit[i] 9) { bit[i+1] +=
最近项目工程量大,好像没什么空码代码,抽空写个简单大数阶乘,证明我还没有彻底荒废。。。 #include<iostream> #include<cmath> using namespace std; int bit[3000]; void update(int hbit) // 进位 { for(int i = 0; i <= hbit; i++) { if(bit[i] > 9) { bit[i+1] += bit[i] / 10; bit[i] %= 10; } } } int fact(int n) // 返回n!结果的位数 { double sum = 0; for(int i = 1; i <= n; i++) sum += log10(i); int digit = (int)sum+1; for(int i = 0; i <= digit; i++) bit[i] = 0; bit[0] = 1; int hbit = 1; for(int i = 2; i <= n; i++) { int j = digit; while(bit[j] == 0) hbit = --j; for(int j = 0; j <= hbit; j++) bit[j] *= i; update(hbit); } int j = digit; while(bit[j] == 0) hbit = --j; return hbit; } int main() { int n; while(~scanf("%d",&n)) { int hbit = fact(n); while(hbit >= 0) printf("%d",bit[hbit--]); printf("n"); } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |