大数阶乘思考
来源:互联网 发布:新手如何快速入门seo 编辑:程序博客网 时间:2024/06/06 02:37
最近一场校招比试题考的是编程实现9999!,最后面试官竟然因为我写的程序最复杂给我一次面试机会,最后发现招聘的岗位是偏向于硬件,最后就没有最后了。
面试官说这个问题应该是很简单,直接long double n=1.0;for(int i=1;i<10000;i++)n*=i;printf("%e",n);回来之后我在在vs2008运行,截图如下
在这里说一下float double的最大存储吧
float 32 6-7 -3.4*10(-38)~3.4*10(38)
double 64 15-16 -1.7*10(-308)~1.7*10(308)
long double 128 18-19 -1.2*10(-4932)~1.2*10(4932)
下面废话不多说给出博主的解决方法:
#include <iostream>using namespace std;struct bigNum{double base;unsigned long eps;};void main(){bigNum plus;plus.base=1.0;plus.eps=0;for(int i=1;i<10000;i++){plus.base*=i;if(plus.base>100000) {plus.eps+=5;plus.base/=100000;}else if(plus.base>10000) {plus.eps+=4;plus.base/=10000;}else if(plus.base>1000) {plus.eps+=3;plus.base/=1000;}else if(plus.base>100) {plus.eps+=2;plus.base/=100;} else if(plus.base>10) {plus.eps+=1;plus.base/=10;}}cout<<"1*2*3*4*5*....*9999="<<plus.base<<"乘以10的"<<plus.eps<<"次方"<<endl;}
输出结果:
与真实结果还是表近:
2846259680917054518906413212119868890148051401702799230794179994274411340003764443772990786757784775815884062142317........
虽然博主的结果不是精确的,但是结果还是可以接受的。博主的程序还可以改进实现更大数的阶乘。下面是一些牛人们实现的大数阶乘,但个人觉得都比较复杂,大家觉得好理解就行不多说了。
http://www.oschina.net/search?scope=code&q=%E5%A4%A7%E6%95%B0%E9%98%B6%E4%B9%98
http://www.cnblogs.com/confach/archive/2005/07/14/192703.html
希望大神指导
- 大数阶乘思考
- 大数阶乘
- 大数阶乘。
- 大数阶乘
- ~阶乘~大数
- 大数阶乘
- 大数阶乘
- 大数阶乘
- 大数阶乘
- 大数阶乘
- 大数阶乘
- 大数阶乘
- 大数阶乘
- 大数阶乘
- 大数阶乘
- 大数阶乘!!
- 大数阶乘
- 大数阶乘
- 记录我对cygwin的个性化设置
- 总结个人网站成功运营的11条原则
- VC Tips
- QThread架构中QObject间通讯常见误区澄清
- how to use Dom to create and remove element
- 大数阶乘思考
- C中.h头文件的写法
- 进程池实现客户端连接请求程序
- Generating Unique Key (Finger Print) for a Computer for Licensing Purposes
- epoll()学习
- SQL union用法
- 程序设计的SOLID原则
- 11第三个放个假低功耗
- 动态规划入门三---背包问题(1)