100阶层算法
来源:互联网 发布:淘宝收藏店铺 编辑:程序博客网 时间:2024/04/29 07:02
// 还记得10进制的乘法么?// 567// * 5// -------// 2835// 用编程语言表示出来就是 // 当前的int a[4] ={0, 5, 6, 7}// 然后从最低位开始用5去乘以每一位,少于10的部分就是这// 个位新的值超过10的部分就是进位,加入他的前一位的结果// 那么从最低位开始a[0]*5=35,由于没有进位所以a[0]=5, carry// =3,a[1]*5=30,加上进位3=33,所以a[1] =3, carry=3,以此类推最// 高位就是a[3] =2;所以我们的到的数组就是a[4] ={2,8,3,5},结果// 当然就是2835拉。 #include <stdio.h>#define SIZE 500 // SIZE 500就可以表示结果在500*6=3000位以内的大整数#define BASE 1000000 // 目前使用进制的基数,1000000进制,6位的底数可以处理1000以内的阶乘 // 超过1000的话会溢出,因为最大的六位数 //乘以4位数可能超过32位整数的范围 // 当处理大一点的阶乘的话就要相应减小这个值 // 所以当你求1千万的阶乘的时候记得base是10,呵呵。unsigned int a[SIZE];void jiechen(int n){ int i, j; int carry; //进位 int max =0; //最高位,当前数即表示占了数组的max+1项 a[0] = 1; //最低位初始化成1 for(i=1; i<=n; i++) { carry =0; //每让这个超大的数乘一个新的数字时,进位初始化成0 for(j=0; j<=max; j++) { // 处理每一位,max为最大位数 a[j] = a[j]*i +carry; carry = a[j] / BASE; //超出1000000 作为高位的进位
a[j] = a[j] % BASE; //当前位
} if(carry != 0) //最高位有进位就调整当前最高位 a[++max] = carry; } printf("%d!=", n); //以下是打印过程 printf("%d", a[max]); //最高位我们不打印前面的0,不然看起来不爽XD for(i=max-1; i>=0; i--) //注意:是从高位开始打印的 printf("%06d", a[i]); //打印6位,注意要包括前面的0,还有修改了BASE的话记得改这里!打印6位,不足的补0 printf("\n");}int main(){ for(int i=1; i<100; i++) //打印100以内的阶乘来验证我们的成果 jiechen(i); return 0;}
0 0
- 100阶层算法
- 数字阶层和...递归算法
- 阶层
- 阶层
- 阶层
- 阶层+
- 算法 求N的阶层 N!
- java算法----乘加的阶层递归算法(一)
- 编程之美中有关阶层的算法
- 100的阶层真的算不出来吗?
- 求阶层
- 阶层因式分解
- 另一种阶层
- 阶层之和
- 特殊阶层
- 大数阶层
- 阶层位数
- 阶层1
- 一幅专题地图有哪些内容?(范围分段专题图)
- canvas 曲线 弧线
- ArcGIS教程:坡向工具的工作原理
- c#中获取cookie
- JavaWeb项目部署到tomcat服务之后设置不需要输入项目名称即可访问
- 100阶层算法
- Windows2000/XP启动过程详细分析
- java HashMap用自定义类做key(二)
- Uva 1335 Beijing Guards 解题报告(策略+二分)
- hdu 2717 Catch That Cow(bfs)
- 【深入Java虚拟机】之三:类初始化
- uva10759 手算多项式分解 或者dp
- 根据时间段,求出时间段范围内的每月最后一周 周二
- uva 299(排序、检索)