java long 运算_Java Long类型,阶乘计算
问题描述:
n! <= 2^63-1 , 求最大的n.
问题:如果不用java自带的 Long.MAX_VALUE,这个值,如何表示Long类型的最大值,我的表示方法为啥不对?
我的代码如何修改才能得到正确的值呢?(因为我观察到factorial这个变量从某一刻开始变成0,可能那个时刻就已经求到了最大的n? long类型的factorial范围不够用了?)
有什么优化的算法呢?
/**
* calculate the max value of n that n! < maxValueOf(Long)
* long 8 bytes
* @return max n
*/
private static int findMax() {
long maxLongValue = Long.MAX_VALUE;//(2<
System.out.println(maxLongValue);
// n! <= 2^63-1, we recommend algorithm
int n = 5;
while(true){
long factorial =n; //watch out here long
int origin = n;
while(n>1){
factorial *= (n-1);
n--;
}
----------下面是结果
/**
* calculate the max value of n that n! < maxValueOf(Long)
* long 8 bytes
* @return max n
*/
private static int findMax() {
long maxLongValue = (1L<
System.out.println(maxLongValue);
// n! <= 2^63-1, we recommend algorithm
int n = 5;
long lastFactorial = n;
while(true) {
if (n == 5) {
long firstFactorial = n;//watch out here long
int origin = n;
while (n > 1) {
firstFactorial = firstFactorial * (n - 1);
n--;
}
lastFactorial = firstFactorial;
n = origin + 1;
} else {
//we do worry about currentFactorial*(n-1) cus we never let a variable store it
//in fact we have to worry about currentFactorial*(n-1)
if (lastFactorial <= (maxLongValue/n)) {
结果n=20;
----------此外还暴露一个问题,我以为,只要我计算factorialn不存储在某个变凉中就不会又问题,实际上,我太native了,看看下面这个图就知道啦。factorialn不存储,也溢出。。。
java long 运算_Java Long类型,阶乘计算相关推荐
- java biginteger 运算_Java大数字运算之BigInteger 原创
在 Java中,有许多数字处理的类,比如Integer 类.但是Integer 类有一定的局限性,下面我们就来看看比 Integer 类更厉害的一个,BigInteger类. BigInteger类型 ...
- java比较运算_Java比较运算符
注意哦: 1. > . < . >= . <= 只支持左右两边操作数是数值类型 2. == . != 两边的操作数既可以是数值类型,也可以是引用类型 public clas ...
- java md5运算_java实现计算MD5
importjava.io.FileInputStream;importjava.security.DigestInputStream;importjava.security.MessageDiges ...
- java 对数运算_java对数计算,java怎样计算对数?
下面给大家分享的是和java计算对数相关的内容,那么具体的应该如何去实现呢? 一.题目 我们以下面的题目为例做解答 古典问题,有一对兔子,从出生之后的第三个月开始,每个月都生一对兔子,小兔子长到了第三 ...
- java bigdecimal乘法_Java BigDecimal类型的 加减乘除运算
加法:add 减法:subtract 乘法:multiply 除法:divide 可参考下面代码: BigDecimal bignum1 = new BigDecimal("10" ...
- java 对数运算_Java语言 第二章 运算和语句
1.数据运算 运算由表达式表示,表达式由运算符和运算分量组成,运算分量可以是常量.变量和方法调用Java基本运算分类图 1.1 赋值运算 1.1.1 简单赋值运算变量 = 表达式 程序执行过程: (1 ...
- java延迟函数_Java 8:延迟计算
Java8:Stream概念的细化,讨论延迟计算/惰性求值Lazy Evaluations. Java中常见的逻辑操作be1&&f(),是短路/short-circuiting计算,避 ...
- java字节数_Java各种类型占用的字节数
数据类型 大小(二进制位数) 范围 默认值 byte(字节) 8 -128 - 127 0 shot(短整型) 16 -32768 - 32768 0 int(整型) 32 -2147483648-2 ...
- java 位运算_java学习之运算符与表达式(四)
(6)位运算符 位运算是指对整数按二进制的位进行运算. 位运算用于整数或字符类型. 有7个:~(非).&(与).|(或).^(异或).<>(右移).>>>(无符号 ...
最新文章
- 现在的编译器还需要手动展开循环吗_一例 Go 编译器代码优化 bug 定位和修复解析...
- Redis集群解决方案比较
- 【spark】SparkSession的API
- java布局管理怎么有图片_java-用于背景图像和文本的布局管理器
- 陶陶摘苹果(洛谷-P1046)
- 文档丨Oracle 20c 概念手册
- 如何一站式打造 AIoT 人才?
- 思科 IP 电话被指包含严重的 RCE 缺陷
- oracle表单独创建完成之后,在加备注语法
- MySQL 触发器例子(两张表同步增加和删除)
- 创建可扩展性系统-12
- macOS Monterey 12.0 Beta5 (21A5304g) 虚拟机 ISO 镜像
- 命令行进行ftp的登陆
- gradient设置上下渐变_CSS3中渐变gradient详解
- JQuery实现shift键多选
- 鸡啄米:C++编程入门系列之前言
- xpath兄弟结点语法
- Opencv入门(播放AVI视频)
- preHandle执行多次问题
- python windows10 安装 tensorrt、torch2trt
热门文章
- 数据结构之二分查找OJ(上)
- Windows下bat脚本(cmd命令学习)
- mysql8.0.20忘记密码_mysql8.0版本忘记密码修改密码
- update语句修改mysql密码_修改 mysql 密码
- client Sdk
- Hadoop的安装与配置(非常重要)
- 使用opencv时报错:C2065 “CV_COMP_CORREL”: 未声明的标识符
- Java前端和后端的区别?
- 超级玛丽2号max即将停售定期?是谣言还是确有其事,有啥影响
- 强化学习及Python代码示例