大数阶乘
2016-07-13 11:51
204 查看
描述
我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
输入
输入一个整数m(0< m<=5000)
输出
输出m的阶乘,并在输出结束之后输入一个换行符
样例输入
50
样例输出
30414093201713378043612608166064768844377641568960512000000000000
学习感想:
大数的阶乘:用数组存放数据
5000!=1* 2 * …*5000
5000!的位数=㏒10(1* 2* 3* 4* 5* ……*5000)+1
eg:㏒10(100)=2 位数=2+1
数组大小可以用最大数的位数*最大数(个人理解)
其他以后补充
我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
输入
输入一个整数m(0< m<=5000)
输出
输出m的阶乘,并在输出结束之后输入一个换行符
样例输入
50
样例输出
30414093201713378043612608166064768844377641568960512000000000000
#include <stdio.h> #include <string.h> #define MAX 20000//最大数5000 5000*4 int main() { int m,i,j,t,s,arr[MAX]; memset(arr,0,sizeof(arr));//初始 arr[0]=1;//注意一定要设为1 scanf("%d",&m); for(i=2;i<=m;i++)//一层循环求阶乘 { t=0;//t清0 for(j=0;j<MAX;j++) { s=arr[j]*i+t;//存储计算结果 arr[j]=s%10;//最低位存进数组前面 t=s/10;//计算进位 } } for(i=MAX-1;i>=0;i--) { if(arr[i]) break; } //把0筛选掉 for(j=i;j>=0;j--) { printf("%d",arr[j]); }//倒着输出 printf("\n"); return 0; }
学习感想:
大数的阶乘:用数组存放数据
5000!=1* 2 * …*5000
5000!的位数=㏒10(1* 2* 3* 4* 5* ……*5000)+1
eg:㏒10(100)=2 位数=2+1
数组大小可以用最大数的位数*最大数(个人理解)
其他以后补充
相关文章推荐
- 记一次神奇的优化过程:Java反射 VS Apache BeanUtils VS Spring BeanUtils
- jquery鼠标移上div切换
- 文本挖掘的基本流程
- 一个男人关心的东西 决定了他的层次
- 配置jdk的几个方法
- JavaScript在IE6下超级链接window.location.href不跳转的bug 及 解决方案
- iOS数据存储
- 向hehe同学学习
- 面向对象(Object类方法重写)day11
- Android WebService 提交数据
- 7、在MyEclipse中自动生成接口
- as3 操作图片,获取,设置实际像素,扣除透明区域
- js数据类型
- iOS中保证线程安全的几种方式与性能对比
- web.xml 中的listener、 filter、servlet 加载顺序及其详解
- System.getProperty()参数大全
- System.Reflection.Emit学习
- Android 中使用MediaRecorder进行录像详解(视频录制)
- PHP语言的优势?
- 密钥文件snk