N阶乘的方法总结
来源:互联网 发布:房产软件 编辑:程序博客网 时间:2024/05/17 15:57
做一下N阶乘的小结:
#include<iostream>#define N 500000using namespace std;//使用long long时候N=21溢出long long fac(long long n){if(1==n)return 1;else return n*fac(n-1);}//当阶乘数N>21的时候,但是这种方法受到VS2008编译器栈空间大小的限制,//VS2008栈空间大小为1M(默认,可以修改),定义数组保存阶乘结果,//sizeof(int)=4,2^21/4=2^19;阶乘结果最大的位数为2^19;//改进的办法:申请动态数组,将结果保存在数组中,数组可以是整型数组和字符数组void fac2(int f[],int n){ int i,j,up,sum; for(i=2;i<n;++i) { up=0; for(j=0;j<N;++j) { sum=f[j]*i+up; f[j]=sum%10; up=sum/10; } }}//在这N可以设定大于2^19的数,上限为内存的大小.void fac3(char f[],int n){ int i,j,up,sum; for(i=2;i<n;++i) { up=0; for(j=0;j<N;++j) { f[j]=f[j]-'0'; sum=f[j]*i+up; f[j]=(sum%10)+'0'; up=sum/10; } }}int main(){ int n; int j=0;/*定义整型数组来保存结果 int *f; f=(int *)malloc(sizeof(int)*N); for(j=1;j<N;++j)f[j]=0; f[0]=1;*///定义字符串来保存结果,字符串一个字符占1字节,一个整型占4字节 char *f; f=(char *)malloc(sizeof(char)*N); for(j=0;j<N;++j)f[j]='0'; f[0]='1';//注意不能这样初始化空间/* while(f) {*f=0;f++; }*/ cin>>n; fac3(f,n); for(j=N-1;f[j]=='0';--j); for(;j>=0;--j)cout<<f[j]-'0'; cout<<endl; cout<<sizeof(int)<<endl; cout<<sizeof(char)<<endl; return 0;}有没有人没有听说long long型,在VS2008中sizeof(long long)=8,占64位,本例测试了当N=50000,n!=20000!的时候。
- N阶乘的方法总结
- Python:N的阶乘的递归方法
- 用递归方法求n的阶乘。
- C语言求N阶乘的方法
- 用迭代方法计算n的阶乘
- Python:N的阶乘非递归方法
- N的阶乘--N!
- 用递归方法计算整数n的阶乘n!
- 用递归方法计算n的阶乘n
- 大数阶乘-N的阶乘
- n(n<100)的阶乘
- 高精度N的阶乘-N!
- 计算N的阶乘
- 计算N的阶乘
- 求n的阶乘
- 递归n的阶乘
- n的阶乘
- 1489 N的阶乘
- 共享内存----实现进程间通信
- 【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
- 黑马程序员:Java基础总结----java各代码块函数执行顺序
- Android NDK: jni/Android.mk: Cannot find module with tag 'CocosDenshion/android' in import path
- C语言函数strstr()分析及实现
- N阶乘的方法总结
- JVisualVM使用
- linux mount (挂载命令)详解
- 结构体中Char a[0]用法——柔性数组
- 二叉排序树
- Codeforces Beta Round #92 (Div. 2 Only) A题
- cocos2d-x -- CCSAXParser笔记
- pushlet定时推送
- 写给新手,从不懂到入门,一只老鸟的嵌入式入门心得