java 10000阶乘_java大数阶乘优化
一道实验题 优化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大数阶乘优化相关推荐
- c语言大数阶乘详细,大数阶乘(c语言)
大数阶乘.代码比较简单. #include #include #define MAXN 25000 // 如果你的阶乘N比较大,建议大一点 int result[MAXN]; int main() { ...
- c语言大整数阶乘计算器,大数阶乘_yuanmercu_oxxdl_新浪博客
菜鸟篇 程序1,一个最直接的计算阶乘的程序 #include "stdio.h" #include "stdlib.h" int main(int argc, ...
- 阶乘之和 大数阶乘之和
情况一:不考虑大数的情况 算法思想:直接上代码,简单易懂. 代码描述: int fac(int n){int p=1, sum=0;for(int i=1; i<=n; i++){p = p*i ...
- c语言求大数阶乘思路,大数阶乘的c语言算法心得
由于大数阶乘的位数超出了int的表示范围,我们只能用一个数组来放置它,那么首先确定结果数组的大小,这个可以根据阶乘位数的计算公式来计算,这里有个关键点,在定义数组的时候可以先给出一个指针,在原则上指针 ...
- java split()方法_Java编程性能优化一些事儿
点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 Smile and stop complaining about the t ...
- java 锁升级_Java并发 锁优化和锁升级
前言 本篇文章介绍Java Synchronized锁优化. 锁是存在哪里的,怎么标识是什么锁 Monitor机制在Java中怎么表现的 锁优化 锁升级 1. 锁存在哪里 对象在内存中的布局分为三块区 ...
- 编程计算并输出1~50之间的所有数的阶乘(大数阶乘)
如果使用普通的方法,当阶乘计算到13!时数据就开始出现问题,因为int型数据无法保存这么大的数字,即使换成long ,long long ,double等也无法容纳,所以我们需要使用大数的方法来完成这 ...
- c 语言大整数阶乘,c++大数阶乘的实现方法
C++代码如下: #include #include #include using namespace std; typedef unsigned int Type; enum{ BASE_DATA ...
- java strim性能_Java代码性能优化总结
前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用, ...
- java biginteger位数_JAVA 大数(BigInteger) 归纳总结
这里主要是归纳了一些他人博客上的对于JAVA大数处理的一些方法. 主要是BigInteger类的应用 转载虽然要注明出处...但是我已经找不到地址了...见谅 Ⅰ基本函数: 1.valueOf(par ...
最新文章
- ConstraintLayout 不能作为activity的根节点,否则fragment显示不出来
- 整流、开关、肖特基区别
- python里的关键字有哪些_Python 中的关键字有哪些?
- codeforces F.F. Teodor is not a liar! 最长不降子序列
- android将字符串转化为json,将字符串转换为JSON数组
- 看懂这5幅图,研发效能分析和改进就容易了
- python更改数据框指定位置的数据_python – 移动数据框列并更改列顺序
- eclipse使用配置教程
- 正则划分省市区(直辖市和附详细地址包括市,区)
- 利用Google Drive將英文版的PDF翻译成中文版的PDF
- 前端工程师的摸鱼日常(4)
- .Net Standard 2.1对您意味着什么
- xp系统蓝屏代码7b_电脑开机蓝屏错误代码0x0000007B的详细解决过程
- nginx防止CDN大量回源
- microsoft excel使用技巧和问题解决
- 华硕服务器如何重装系统,讲解华硕重装系统教程
- Bootstrap Slider轮播图片样式控制
- [Solved] Can not extract resource from com.android.aaptcompiler
- 2022年,有哪些小本生意可以做
- com.101tec.zkclient使用
热门文章
- 每日一句 i'm by disposition one of life's neutrals,a human Switzerland
- Tensorflow实现fashion-mnist数据集的图片识别项目代码
- windows nginx 停止和启动_Nginx安装过程详解
- OPENCV 函数cvCreateMat
- [转载] IoT设备WiFi配网及现状
- 配置 eNSP 连接VMware虚拟机网络
- python中dir函数的作用_【Python】Python内置函数dir详解
- VS使用SDL2时LNK2019无法解析的外部符号_main
- php数据表创建命令代码,MySQL创建和删除数据表的命令及语法详解
- mysql中 if语句的使用