1000的阶乘是一个非常之大的数字,在看到这个问题的第一个反应就是,直接运算肯定会溢出,事实也如此,我们如何解决这个问题呢?

我们小学的时候就会计算这样的乘法:123*9

三九二十七进二写七 7 2

二九十八 十八加二等于二十 进二写零 0 2

一九得九 九加二十一 进一写一 1 1

最后的结果是1107

如何计算阶乘结果的位数?

方法一:

log1+log2+log3+log4+...+logn 取整加1

方法二:

斯特林公式

按照这样的步骤,把每次得到的结果存放到数组里,考虑到无法确定数组长度,采用ArrayList

实现如下:

Java代码

publicstaticvoidfactorial(intvalue) {

ArrayList result =newArrayList();

intcarryBit =0;

result.add(newInteger(1));

for(intout =2; out <= value; out++) {

for(intin =0; in

inttemp = ((Integer) result.get(in)).intValue() * out

+ carryBit;

result.set(in,newInteger(temp %10));

carryBit = temp /10;

}

while(carryBit !=0) {

result.add(newInteger(carryBit %10));

carryBit = carryBit /10;

}

}

StringBuffer sb=newStringBuffer(result.size());

for(inti=0;i

{

sb.append(result.get(i));

}

sb=sb.reverse();

System.out.println("result="+sb);

System.out.println("结果位数"+result.size());

}

public static void factorial(int value) {

ArrayList result = new ArrayList();

int carryBit = 0;

result.add(new Integer(1));

for (int out = 2; out <= value; out++) {

for (int in = 0; in < result.size(); in++) {

int temp = ((Integer) result.get(in)).intValue() * out

+ carryBit;

result.set(in, new Integer(temp % 10));

carryBit = temp / 10;

}

while (carryBit != 0) {

result.add(new Integer(carryBit % 10));

carryBit = carryBit / 10;

}

}

StringBuffer sb=new StringBuffer(result.size());

for(int i=0;i

{

sb.append(result.get(i));

}

sb=sb.reverse();//倒序

System.out.println("result="+sb);

System.out.println("结果位数"+result.size());

}

C语言版:(自己写的)

#include

using namespace std;

void factorial(int value);

void main()

{

factorial(10); }

void factorial(int value)

{ int result[10000]={0};

int result_size=1;//实时更新result的实际位数

int carryBit =

0; //进位的值

result[0]=1;//初始结果为1

for (int out = 2; out <= value;

out++) { for (int in = 0; in < result_size; in++)

{ int temp = result[in] *

out + carryBit; result[in]=temp % 10; carryBit = temp / 10; } while (carryBit != 0) { result[result_size]=carryBit %

10; result_size++;

carryBit = carryBit / 10; } }

cout<

for(int

i=0;i

} }

感悟:

任务复杂的事情,都是需要分解成一小块一小块的小任务去完成的呀!!

事无巨细!!

c语言阶乘1000怎么写,(华为面试一)1000的阶乘如何实现?相关推荐

  1. [一年前写]华为面试官面试

    呵呵,今天赶巧碰上了华为的面试官,很不辛的被pass掉了.讲讲大概的经过吧.  说起来能被华为面试确实有点巧,我在华清远见培训嵌入式,然后武汉软通动力公司就来培训的地方面试,过了很久很久--我不记得有 ...

  2. php面试宝典1000题,【PHP面试宝典1000题】HTTP中的请求头(深圳小美网络科技)

    (1)通作一新求抖直微圈用信息头 即址工框按都不他移据流.果原箭近第作架量是能用于请求消息中,也能用于响应信息中,但与被传输的实体内容没有关系的信息头,如Data,Pra分浏代刚的学过互解久点维数数请 ...

  3. C语言面试题汇总(华为公司)

    C语言面试题总汇 4.    static有什么用途?(请至少说明两种) 1.限制变量的作用域 2.设置变量的存储域 7.    引用与指针有什么区别? 1) 引用必须被初始化,指针不必. 2) 引用 ...

  4. C语言面试题汇总(华为公司) 【转】

    这是从别人博客上看到的,个人觉得有些用,内容比较多,以后抽时间看看. C语言面试题总汇 4.    static有什么用途?(请至少说明两种) 1.限制变量的作用域 2.设置变量的存储域 7.    ...

  5. 主题:一个中专生:我在华为面试的真实经历,转http://www.javaeye.com/topic

    华为是个创造神话的企业,从注册资金2万元的飞速膨胀.3G.高科技.高速成长.全民持股和民营企业--目前华为在国内不但是电信第一大供商货商,而且海外市场也越来越火红,目前正在蚕食网络商老大CISCO的本 ...

  6. 朋友去华为面试,轻松拿到26K的Offer,羡慕了......

    最近有朋友去华为面试,面试前后进行了20天左右,包含4轮电话面试.1轮笔试.1轮主管视频面试.1轮hr视频面试. 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮 ...

  7. 2年java,华为面试,一面 挂

    一位深圳的球友,上周去华为的面经,准备不充分,最后就是面试没通过. 昨晚上,咱们通了电话,一起总结了这次面试失败的原因. 失败的原因有三点: 1.自我介绍现场发挥(临时组织语言,时间太短) 2.八股文 ...

  8. 朋友去华为面试,轻松拿到30K的Offer,羡慕了......

    最近有朋友去华为面试,面试前后进行了20天左右,包含4轮电话面试.1轮笔试.1轮主管视频面试.1轮hr视频面试. 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮 ...

  9. 华为python面试_记华为面试

    之前在华为官网上投递了华为的车联网岗位,不过华为没有理我.后来华为来同济开宣讲会,给了一个邮箱,顺手就又给车联网部门投递了一个邮件. 然后上周一个电话过来叫我周六早上去他们上海的总部面试. 华为还是很 ...

最新文章

  1. IIS7、IIS8添加net.tcp协议报错 未将对象引用设置到对象的实例。
  2. php繁体拼音字母,php获取中文字符串的首字符拼音字母
  3. 从svn导入项目后处理一些报错信息
  4. 作为微软技术.net 3.5的三大核心技术之一的WCF虽然没有WPF美丽的外观
  5. Hadoop2之NameNode HA详解
  6. 服务器安装三节点RabbitMQ集群(4)
  7. linux下qt加载boost,信号槽的实现实例—— Qt 和 Boost
  8. X64-CL iPro 采集卡OC-64EO-IPRO0简介
  9. 三、optimizer_trace分析
  10. MySql Binlog初识
  11. labview学习之“创建数组”函数
  12. protoc ——protubuf编译后的可执行文件命令usage
  13. AXI总线,AXI_BRAM读写仿真测试
  14. VMware提示“指定的文件不是虚拟磁盘“或“The file specified is not a virtual disk”打不开
  15. 武威市教师职称计算机考试,关于高级教师职称评定述职报告(精选5篇)
  16. 解决win10下高分屏的字体显示模糊问题
  17. 台式电脑计算机被限制,gpedit.msc 无法运行 提示本次操作由于这台计算机的限制而被取消(超强解决方案)...
  18. POI插入附件到Excle
  19. python3.6源码编译安装 解决SSL报错
  20. 高可用安装K8s集群1.20.x

热门文章

  1. 点击图标查看对应的魔法表情
  2. 真无线蓝牙耳机比起有线耳机真的更好吗?新手入门哪款蓝牙耳机适合
  3. 韩国商业银行与Atomrigs实验室签署谅解备忘录,探讨加密资产管理
  4. CTF-rootme 题解之SSH Agent Hijacking
  5. turtle具体详解
  6. java socket telnet_使用java简单模拟ping和telnet的实现
  7. php qstr,PHP实现多服务器共享SESSION 数据(2)
  8. 质量成本(一致性成本和非一致性成本)
  9. 微信小程序之export和import
  10. 【拖拖拖没烦恼;难难难睡不着】22届错过校招未就业|什么是校招?二本进不去大厂,校招不重要?