问题描述:

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类型,阶乘计算相关推荐

  1. java biginteger 运算_Java大数字运算之BigInteger 原创

    在 Java中,有许多数字处理的类,比如Integer 类.但是Integer 类有一定的局限性,下面我们就来看看比 Integer 类更厉害的一个,BigInteger类. BigInteger类型 ...

  2. java比较运算_Java比较运算符

    注意哦: 1.  > . < . >= . <= 只支持左右两边操作数是数值类型 2.  == . != 两边的操作数既可以是数值类型,也可以是引用类型 public clas ...

  3. java md5运算_java实现计算MD5

    importjava.io.FileInputStream;importjava.security.DigestInputStream;importjava.security.MessageDiges ...

  4. java 对数运算_java对数计算,java怎样计算对数?

    下面给大家分享的是和java计算对数相关的内容,那么具体的应该如何去实现呢? 一.题目 我们以下面的题目为例做解答 古典问题,有一对兔子,从出生之后的第三个月开始,每个月都生一对兔子,小兔子长到了第三 ...

  5. java bigdecimal乘法_Java BigDecimal类型的 加减乘除运算

    加法:add 减法:subtract 乘法:multiply 除法:divide 可参考下面代码: BigDecimal bignum1 = new BigDecimal("10" ...

  6. java 对数运算_Java语言 第二章 运算和语句

    1.数据运算 运算由表达式表示,表达式由运算符和运算分量组成,运算分量可以是常量.变量和方法调用Java基本运算分类图 1.1 赋值运算 1.1.1 简单赋值运算变量 = 表达式 程序执行过程: (1 ...

  7. java延迟函数_Java 8:延迟计算

    Java8:Stream概念的细化,讨论延迟计算/惰性求值Lazy Evaluations. Java中常见的逻辑操作be1&&f(),是短路/short-circuiting计算,避 ...

  8. java字节数_Java各种类型占用的字节数

    数据类型 大小(二进制位数) 范围 默认值 byte(字节) 8 -128 - 127 0 shot(短整型) 16 -32768 - 32768 0 int(整型) 32 -2147483648-2 ...

  9. java 位运算_java学习之运算符与表达式(四)

    (6)位运算符 位运算是指对整数按二进制的位进行运算. 位运算用于整数或字符类型. 有7个:~(非).&(与).|(或).^(异或).<>(右移).>>>(无符号 ...

最新文章

  1. 现在的编译器还需要手动展开循环吗_一例 Go 编译器代码优化 bug 定位和修复解析...
  2. Redis集群解决方案比较
  3. 【spark】SparkSession的API
  4. java布局管理怎么有图片_java-用于背景图像和文本的布局管理器
  5. 陶陶摘苹果(洛谷-P1046)
  6. 文档丨Oracle 20c 概念手册
  7. 如何一站式打造 AIoT 人才?
  8. 思科 IP 电话被指包含严重的 RCE 缺陷
  9. oracle表单独创建完成之后,在加备注语法
  10. MySQL 触发器例子(两张表同步增加和删除)
  11. 创建可扩展性系统-12
  12. macOS Monterey 12.0 Beta5 (21A5304g) 虚拟机 ISO 镜像
  13. 命令行进行ftp的登陆
  14. gradient设置上下渐变_CSS3中渐变gradient详解
  15. JQuery实现shift键多选
  16. 鸡啄米:C++编程入门系列之前言
  17. xpath兄弟结点语法
  18. Opencv入门(播放AVI视频)
  19. preHandle执行多次问题
  20. python windows10 安装 tensorrt、torch2trt

热门文章

  1. 数据结构之二分查找OJ(上)
  2. Windows下bat脚本(cmd命令学习)
  3. mysql8.0.20忘记密码_mysql8.0版本忘记密码修改密码
  4. update语句修改mysql密码_修改 mysql 密码
  5. client Sdk
  6. Hadoop的安装与配置(非常重要)
  7. 使用opencv时报错:C2065 “CV_COMP_CORREL”: 未声明的标识符
  8. Java前端和后端的区别?
  9. 超级玛丽2号max即将停售定期?是谣言还是确有其事,有啥影响
  10. 强化学习及Python代码示例