开发者社区> 问答> 正文

累加算法的疑惑 数据类型不对么?? 400 报错

累加算法的疑惑 数据类型不对么?? 400 报错

public static void main(String[] args) {
		//9223372036854000000
		int n = 100000;
		long startTime = System.currentTimeMillis();
		long sum1 = ((1+n)*n)/2;
		long Timeused = System.currentTimeMillis() - startTime;
		System.out.println("sum1="+sum1+" Timeused:"+Timeused);
		
		long sum2 =0;
		startTime = System.currentTimeMillis();
		for (int i = 1; i <= n; i++) {
			sum2=sum2+i;
		}
		Timeused = System.currentTimeMillis() - startTime;
		System.out.println("sum2="+sum2+" Timeused:"+Timeused);
	}

输出是

sum1=705082704 Timeused:0
sum2=5000050000 Timeused:1


由于Long型完全足够n*n 所以不解第一个的算法为什么出错。。。

环境64BIT OS JDK 1.6最新 


展开
收起
爱吃鱼的程序员 2020-06-04 11:52:02 389 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    第三行long   n = 100000;######

    引用来自“gnefil.nil”的答案

    第三行long   n = 100000;
    这个固然可以执行成功 但是根本原因不解~ 是 n*n 的时候有类型的强制转换导致溢出么?
    ######两个int相乘结果就是int型。。。所以溢出了######

    引用来自“无敌大金金”的答案

    引用来自“gnefil.nil”的答案

    第三行long   n = 100000;
    这个固然可以执行成功 但是根本原因不解~ 是 n*n 的时候有类型的强制转换导致溢出么?
    3Q 理解了~
    2020-06-04 16:44:19
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载