一道实验题 优化1000,5000,10000,三个数的阶乘计算,显示优化前后三个数的计算时间进行对比。

优化措施除了“biginteger”方法字符串方法外还可以用什么方法呢。简要说明优化措施

源代码如下:

class Huge

{

private int[] digits;

public Huge(int nDigits)

{

digits = new int[nDigits];

}

private Huge add(Huge n2)

{

Huge result = new Huge(digits.length);

int carry = 0;

for (int k = 0; k < digits.length; k++)

{

int sum = carry + digits[k] + n2.digits[k];

result.digits[k] = sum % 10;

carry = sum / 10;

}

return result;

}

private Huge multiplyDigit(int digit)

{

Huge result = new Huge(digits.length);

int carry = 0;

for (int k = 0; k < digits.length; k++)

{

int prod = carry + digit * digits[k];

result.digits[k] = prod % 10;

carry = prod / 10;

}

return result;

}

private Huge multiply(int number)

{

int weight = 0;

Huge result = new Huge(digits.length);

while (number > 0)

{

int d = number % 10;

number /= 10;

Huge n = multiplyDigit(d);

n.shift(weight++);

result = result.add(n);

}

return result;

}

private void output()

{

int k = digits.length - 1;

while (digits[k--] == 0) ;

for (k = k + 1 ; k >= 0; k--)

System.out.printf("%d", digits[k]);

System.out.println();

}

private void shift(int weight)

{

for (int k = digits.length - 1; k >= 0; k--)

digits[k] = (k >= weight)? digits[k - weight] : 0;

}

public static void main(String[] args)

{

int N = Integer.parseInt(args[0]);

// calculate num-of-digits required for storing factorial(n)

int nbits = 0;

for (int k = 1; k <= N; k++)

nbits += (int)Math.ceil(Math.log10(k));

Huge result = new Huge(nbits);

result.digits[0] = 1;

for (int k = 2; k <= Integer.parseInt(args[0]); k++)

result = result.multiply(k);

result.output();

}

}

java 10000阶乘_java大数阶乘优化相关推荐

  1. c语言大数阶乘详细,大数阶乘(c语言)

    大数阶乘.代码比较简单. #include #include #define MAXN 25000 // 如果你的阶乘N比较大,建议大一点 int result[MAXN]; int main() { ...

  2. c语言大整数阶乘计算器,大数阶乘_yuanmercu_oxxdl_新浪博客

    菜鸟篇 程序1,一个最直接的计算阶乘的程序 #include "stdio.h" #include "stdlib.h" int main(int argc, ...

  3. 阶乘之和 大数阶乘之和

    情况一:不考虑大数的情况 算法思想:直接上代码,简单易懂. 代码描述: int fac(int n){int p=1, sum=0;for(int i=1; i<=n; i++){p = p*i ...

  4. c语言求大数阶乘思路,大数阶乘的c语言算法心得

    由于大数阶乘的位数超出了int的表示范围,我们只能用一个数组来放置它,那么首先确定结果数组的大小,这个可以根据阶乘位数的计算公式来计算,这里有个关键点,在定义数组的时候可以先给出一个指针,在原则上指针 ...

  5. java split()方法_Java编程性能优化一些事儿

    点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 Smile and stop complaining about the t ...

  6. java 锁升级_Java并发 锁优化和锁升级

    前言 本篇文章介绍Java Synchronized锁优化. 锁是存在哪里的,怎么标识是什么锁 Monitor机制在Java中怎么表现的 锁优化 锁升级 1. 锁存在哪里 对象在内存中的布局分为三块区 ...

  7. 编程计算并输出1~50之间的所有数的阶乘(大数阶乘)

    如果使用普通的方法,当阶乘计算到13!时数据就开始出现问题,因为int型数据无法保存这么大的数字,即使换成long ,long long ,double等也无法容纳,所以我们需要使用大数的方法来完成这 ...

  8. c 语言大整数阶乘,c++大数阶乘的实现方法

    C++代码如下: #include #include #include using namespace std; typedef  unsigned int Type; enum{ BASE_DATA ...

  9. java strim性能_Java代码性能优化总结

    前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用, ...

  10. java biginteger位数_JAVA 大数(BigInteger) 归纳总结

    这里主要是归纳了一些他人博客上的对于JAVA大数处理的一些方法. 主要是BigInteger类的应用 转载虽然要注明出处...但是我已经找不到地址了...见谅 Ⅰ基本函数: 1.valueOf(par ...

最新文章

  1. ConstraintLayout 不能作为activity的根节点,否则fragment显示不出来
  2. 整流、开关、肖特基区别
  3. python里的关键字有哪些_Python 中的关键字有哪些?
  4. codeforces F.F. Teodor is not a liar! 最长不降子序列
  5. android将字符串转化为json,将字符串转换为JSON数组
  6. 看懂这5幅图,研发效能分析和改进就容易了
  7. python更改数据框指定位置的数据_python – 移动数据框列并更改列顺序
  8. eclipse使用配置教程
  9. 正则划分省市区(直辖市和附详细地址包括市,区)
  10. 利用Google Drive將英文版的PDF翻译成中文版的PDF
  11. 前端工程师的摸鱼日常(4)
  12. .Net Standard 2.1对您意味着什么
  13. xp系统蓝屏代码7b_电脑开机蓝屏错误代码0x0000007B的详细解决过程
  14. nginx防止CDN大量回源
  15. microsoft excel使用技巧和问题解决
  16. 华硕服务器如何重装系统,讲解华硕重装系统教程
  17. Bootstrap Slider轮播图片样式控制
  18. [Solved] Can not extract resource from com.android.aaptcompiler
  19. 2022年,有哪些小本生意可以做
  20. com.101tec.zkclient使用

热门文章

  1. 每日一句 i'm by disposition one of life's neutrals,a human Switzerland
  2. Tensorflow实现fashion-mnist数据集的图片识别项目代码
  3. windows nginx 停止和启动_Nginx安装过程详解
  4. OPENCV 函数cvCreateMat
  5. [转载] IoT设备WiFi配网及现状
  6. 配置 eNSP 连接VMware虚拟机网络
  7. python中dir函数的作用_【Python】Python内置函数dir详解
  8. VS使用SDL2时LNK2019无法解析的外部符号_main
  9. php数据表创建命令代码,MySQL创建和删除数据表的命令及语法详解
  10. mysql中 if语句的使用