两个Long类型相乘溢出怎么解决

如题,今天面试,面试官问到一个问题,怎么处理两个Long类型相乘溢出的问题?

5个回答

[code="java"]
public static void main(String[] args) throws Exception {
long a = Long.MAX_VALUE;
long b = Long.MAX_VALUE;

    BigDecimal ba = new BigDecimal(String.valueOf(a));
    BigDecimal bb = new BigDecimal(String.valueOf(b));
    BigDecimal bc = ba.multiply(bb);
    System.out.println(String.valueOf(a));
    System.out.println(String.valueOf(b));
    System.out.println(bc);
}

[/code]

9223372036854775807
9223372036854775807
85070591730234615847396907784232501249

用java.math.BigInteger处理。

java.Math.BigDecimal.multiply(java.Math.BigDecimal multiplican)

用BigDecimal

可以简单的说使用比long大的数据类型去接收乘积结果。例如:float,double,long double

http://jeelee.iteye.com/blog/652003

java.math.BinInteger类是针对大整数的处理类

java.math.BigDecimal类是针对大小数的处理类并加入了小数的概念

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
两个unsigned long或者long double 类型相乘,怎么判断结果是否溢出?
用C语言怎么写啊!
long类型数值溢出
msOfDay = 86400000 msOfWeek = 604800000 msOf30Days = -1702967296 计算日期差时分母可能要1000*3600*24*30,这时分母是月,结果就是第三个溢出的值,因为这4个乘数都是int型 解决方法是1000换成1000L,直接用long类型 http://www.blogjava.net/aoxj/ar
实现两个long long 相乘取模的汇编代码
long long multi(long long tp1,long long tp2){ long long ret=0; __asm__("movq %1,%%rax\n imulq %2\n idivq %3\n":"=d"(sum[i]):"m"(tp1),"m"(tp2),"m"(mod):"%rax"); return ret; }
java long类型溢出误区
最近遇到一个问题long类型溢出,很神奇,第一反应。后面测试一下。 private void testLong() { StringBuffer buffer = new StringBuffer(); Long time = System.currentTimeMillis(); //后面加上大写L,或者小写l。就不会溢出变成负数了 ...
两个Long类型怎么比较大小
问题:两个Long类型的值比较是否相等,明明值是一样的,可是就是走了不想等的else,疑惑!!! 解决: Java中如果使用 == 双等于比较对象,等于比较的是两个对象的内存地址,也就是比较两个对象是否是同一个对象如果比较两个Long对象值是否相等,则不可以使用双等号进行比较, 要使 equals 方法 或者 a.longValue()==b.longValue()
两个整型变量相乘怎么判断结果是否溢出?
如题
java 整形相乘溢出
  今天看日志发现有一段程序不应该执行的,经过检查发现,犯了一个错误,四个 int 相乘超出 int 最大值造成溢出,结果为负数 3600 * 1000 * 24 * 29 = -1789367296 处理:将乘法算式 直接改为 2505600000 或者将第一个数后面加上小写字母 l ,3600l * 1000 * 24 * 29   ...
int整数相乘溢出
我们计算一天中的微秒数:  long microsPerDay = 24 * 60 * 60 * 1000 * 1000;// 正确结果应为:86400000000 System.out.println(microsPerDay);// 实际上为:500654080 问题在于计算过程中溢出了。这个计算式完全是以int运算来执行的,并且只有在运算完成之后,其结果才被提升为long,而此时已经
java中Long类型溢出引发的思考
long var = 数字常量(数字常量大于等于2^31),实际上,此时的var 的值为溢出后的值; 溢出之后会变为负值和预期作不符。 并且编译器不报错,但是结果和预期不符。 在检查bug过程中 要注意所赋值不能超过该变量自身的最大值,其他类型也是如此。 byte的取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1) short的取值范围为-32768~3276
怎么把long long类型的转化成字符串
RT
unpack怎么接收 unsigned long long类型
服务器是小端模式, 发送过来前8个字节是 unsigned long long 类型的数据, 我怎么用unpack来读出来呢?rnunpack("Q8md5/a10end_str", $recv_body); 这个不行 多谢
判断long long相加溢出,及溢出后取值范围
如果两个正数之和等于负数,或者两个负数之和之和等于正数,那么就是溢出。 ex: A, B, C 为 long long 类型 判断A+B>C? long long 取值范围为[-2^63,2^63-1] ①A+B取值为[2^63, 2^64-2]时越界,这时使用 long long存储后的值的区间为[-2^63,-2] 因为 2^63-2^64=-2^63 在取值...
怎么解决网页内容溢出
[img=https://img-bbs.csdn.net/upload/201603/04/1457100172_400293.png][/img][img=https://img-bbs.csdn.net/upload/201603/04/1457099909_132250.png][/img]rn第一张是100%时候的,第二张是放大400%以后的,但出现了空白部分,怎么解决,谢谢
除法溢出怎么解决
如题
溢出怎么解决?
题目描述: rn求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。rnrn输入: rn输入可能包含多个测试样例。rn对于每个测试案例,输入为一个整数n(1<= n<=100000)。rnrn输出: rn对应每个测试案例,rn输出1+2+3+…+n的值。rn代码如下:[code=c]int sum(int n);rn#include rn#include rnrnint main()rnrn unsigned long n;rn scanf("%d",&n);rn printf( "%d\n",sum(n) );rnrn return 0;rnrnrnint sum(int n)rnrn if(n==1)rn return 1;rn elsern return n+sum(n-1);rn[/code]rn输入n小于等于1万的时候,输出正确,输入大数的时候,数据溢出,一般数据溢出怎么处理?rn也就是说,输入的是10万(题目要求的最大值),怎么解决?
long long 类型的操作
有long long 类型到字符串的转换操作的库函数吗?字符串到long long呢?
long和long类型的区别
long是基础数据类型,Long是long的封装类型,也叫包装类; 什么叫包装类?在java中有时候的运算必须是两个类对象之间进行的,不充许对象与数字之间进行运算。所以需要有一个对象,这个对象把数字进行了一下包装,这样这个对象就可以和另一个对象进行运算了。 long的默认值是0;Long默认值是null; 基本类型:long,int,byte,float,double,char,sh
long long int 溢出问题,求指导
#include "stdafx.h"rn#includern#includernint main() rn int bytes_of_int;rn int bits_of_int;rn int biggest_of_int;rn bytes_of_int = sizeof(int);rn bits_of_int = bytes_of_int * 8;rn biggest_of_int = pow(2, bits_of_int - 1) - 1;rn printf("There are %d bytes in a int,equals %d bits,and it can signify %d at most.\n", bytes_of_int, bits_of_int, biggest_of_int);rn printf("When overflow ,%d\n", biggest_of_int + 1);rnrn short int bytes_of_short_int;rn short int bits_of_short_int;rn short int biggest_of_short_int;rn bytes_of_short_int = sizeof(short int);rn bits_of_short_int = bytes_of_short_int * 8;rn biggest_of_short_int = pow(2, bits_of_short_int - 1) - 1;rn printf("There are %hd bytes in a short int,equals %hd bits,and it can signify %hd at most.\n", bytes_of_short_int, bits_of_short_int, biggest_of_short_int);rn printf("When overflow ,%hd\n", biggest_of_short_int + 1);rnrn long int bytes_of_long_int;rn long int bits_of_long_int;rn long int biggest_of_long_int;rn bytes_of_long_int = sizeof(long int);rn bits_of_long_int = bytes_of_long_int * 8;rn biggest_of_long_int = pow(2, bits_of_long_int - 1) - 1;rn printf("There are %ld bytes in a long int,equals %ld bits,and it can signify %ld at most.\n", bytes_of_long_int, bits_of_long_int, biggest_of_long_int);rn printf("When overflow ,%ld\n", biggest_of_long_int + 1);rnrn long long int bytes_of_long_long_int;rn long long int bits_of_long_long_int;rn long long int biggest_of_long_long_int;rn bytes_of_long_long_int = sizeof(long long int);rn bits_of_long_long_int = bytes_of_long_long_int * 8;rn biggest_of_long_long_int = pow(2, bits_of_long_long_int - 1) - 1;rn printf("There are %lld bytes in a long long int,equals %lld bits,and it can signify %lld at most.\n", bytes_of_long_long_int, bits_of_long_long_int, biggest_of_long_long_int);rn printf("When overflow ,%lld\n", biggest_of_long_long_int + 1);rn long long int biggest_of_long_long_int_test = 9223372036854775807;rn printf("%lld\n", biggest_of_long_long_int_test);rn printf("%lld\n", biggest_of_long_long_int_test + 1);rn getchar();rn return 0;rnrn
long怎么改为varchar2类型。
求大侠指点。
BigInteger 怎么转成 Long 类型的
countStr = "select count(*) from (from tbOverTime where EmpName not like '"rn + empNamern + "') t where t.Flag like '未确认' or t.CheckMan like '"rn + empName + "'";rn countStr = "select count(*) from tbovertime";rn query = sessionFactory.getCurrentSession().createSQLQuery(countStr);rn qr.setTotalrecord((Long)query.uniqueResult());rntotalrecord这个是 long 类型的 。。。但 query.uniqueResult() 是 BigInteger rn怎么转啊 !
long类型的除法运算怎么算?
比如 long a = 5; long b = 10;rnrn那么我想求 a/a+b 的百分比结果,精确到0.00%.请教各位 该如何运算?
CString类型 怎么转换成为long类型?
CString类型 怎么转换成为long类型?rn具体一点就是我用CListCtrl(DAO开发数据库)报表时,将long转换为CString,查询定位时需要将CString 转回long,请赐教!!rn感激不尽!
String 类型怎么转化为 long类型??
如题
求两个大整数相乘的结果 不能使用BigInteger和long
提示:  1、 两个数相乘的值的位数不会超过两者位数之和  2、char转换成int时,直接用int接受的值为asiic码值, 可以使用Character.getNumericValue(‘3’) 获取实际数值  3、乘数 * 被乘数    将各位置分别相乘时,要注意索引位置, 最后再计算进数  5、消除字符串前面的无效字符0, 此处使用正则表达式替换 代码: public s
如何得到两个整数相乘以后溢出的部分?
本人要做一个虚拟机程序,大部分指令已经模拟完毕,现在遇到了一个问题,虚拟机中又一个指令 MUL src, 其作用就是把 EAX寄存器的值rn和src相乘,相乘的结果放在EDX:EAX中,EAX的值很容易求,因为EAX中存放结果中没有溢出的部分,那EDX该怎么求呢。 rn 在C语言中如果定义了两个32bit的整数 a 和 b , c也是32bit的整数, 那么执行 c = a * b 以后c中存放rn的a * b 结果中没有溢出的部分,溢出的部分该怎么求呢?rnrn不要用内嵌汇编和64位整数扩展,那样可移植性就不好了。rnrn谢谢各位高手。rnrnrn
两个int拼接成 long long类型的变量
在一些场景中,需要把两个int 拼接成一个数值来完成一定的功能,实现方法如下 union test0 { long long l; struct { int a; int b; }; }; int main { test0 t0; t0.a = 1; t0.b = 2; p...
unsigned long long类型匹配问题
#define A 0x0002000000000000rn#define B 0x0003000000000000rnrntypedef struct rn unsigned long long value1; rn unsigned long long value2; rntest;rnrntest test_array[] = A ,B;rn rnrn这个为什么总是提示integer constant is too large for ‘long’ typern
long 和 int 是两个不同的类型???
size都是4 ,rnrn试试下面的程序rnrna.cpp内容rnvoid int_test(int a)rnrn std::cout << a ;rnrnrnrnb.cpp内容rnextern void int_test(long);rnmain()rnrn int_test(123);rnrnrn链接的时候提示没有找到 int_test(long)rn显然,编译器认为int 与long是两个不同的类型。rnrn以上在VC和BC下同样表现。rnrn有谁知道相关解释文档吗?rnrnrn
两个long类型的数值相除问题
问题描述:两个long类型的数值相除,结果会自动取整。当两个数相除结果是零点几的时候,如何避免结果自动取整为0 解决: 在做除的操作时,被除数先乘以1.0再去除以除数,这样得到的结果就是小数而不会取整为零。 示例:  long a = 1; long b = 2; System.out.println(a/b);      //结果为 0 System.out.println(a*1
整型类型(long long 、_int64)
整型类型的输入输出格式(long long 、_int64)
大数(string类型)相乘
#include&lt;iostream&gt; #include&lt;string&gt; using namespace std; //两个字符串相加 string add(string str1, string str2){ string result = ""; if(str1.size() &lt; str2.size()){ int lengt...
关于long long 类型的定义
关于objective-C中的一个问题:rnrn看见了一段代码,使用下面的属性:rnrn @interface Store : NSObjectrn rn rn @property (nonatomic) long long amount; // 2 long type? why?rn ...rn @endrnrn什么是long long类型?
long long类型编译问题
cygwin底下运行的程序拿到vc下面调,碰到long long数据类型非法声明,怎么解决?怎样替换编译器?
怎么保证两个long int类型的相除,是除不尽的
怎么保证两个long int类型的相除,是除不尽的
怎么解决3n+1,溢出问题?
3n+1问题是一个简单有趣而又没有解决的数学问题。这个问题是由L. Collatz在1937年提出的。克拉兹问题(Collatz problem)也被叫做hailstone问题、3n+1问题、Hasse算法问题、Kakutani算法问题、Thwaites猜想或者Ulam问题。rn问题如下:rn(1)输入一个正整数n;rn(2)如果n=1则结束;rn(3)如果n是奇数,则n变为3n+1,否则n变为n/2;rn(4)转入第(2)步。rn rn[code=c]#includern#includernint main()rnrn int n;rn int count=0;rn scanf("%d",&n);rn while(1
堆栈空间溢出怎么解决?
我循环调用一个自定义函数计算数值然后加入到MSFlexGrid中,有可能要计算上万次,结果出现了“堆栈空间溢出”的问题,请问该如何实现计算几万次呢。
用BigDecimal和int类型相乘,怎么实现
![图片说明](https://img-ask.csdn.net/upload/201903/27/1553667809_697900.png)rn数据库有一个字段是单价unitprice,有一个总价price,还有一个星期week,如何用代码实现price=unitprice乘以week
关于long类型大数据计算溢出问题,请教!
代码如下:rnrnFunction s(n As Long, m As Long, key As Boolean) As LongrnrnrnrnIf key = True Thenrnm = n - m + 1rnkey = FalsernEnd IfrnIf n = m Thenrns = nrnElsernn = n * s((n - 1), m, key)rns = nrnEnd IfrnEnd Functionrnrn运行时产生溢出,为什么啊?怎么解决,有知道的吗?
汇编两个数据相乘!???
有三个数:x,y,z要求写一程序:z=x*y rndata segmentrnx dw -2rny dw 3rnz dw 0rndata endsrncode segmentrnmain proc farrnassume cs:code,ds:datarnstart:rnpush dsrnsub ax,axrnpush axrn;--------------rnmov ax,x ;ax=-2 ;在分步调试时这里显示:mov ax,[0000],应该为mov ax,-2rnmov bx,y ;bx=3 ;mov bx,[0002] 这里也应该为mov bx,3rnimul bx ;ax=ax*bxrnmov z,axrnret ;jump if ax is not sign numberrnmain endprncode endsrnend start
两个String相乘
String str1 = "9.99"; String str2 = "0.95"; BigDecimal num1 = new BigDecimal(str1); BigDecimal num2 = new BigDecimal(str2); 加法 BigDecimal result = num1.add(num2); 减法
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数