小弟尝试着做了一下网易2018春招笔试的小Q数列的题目,遇到了如下问题,首先贴下代码部分:
import java.util.ArrayList;
import java.util.List;
public class ShuLie1 {
// 构造数列
static List<Long> Num() {
List<Long> list = new ArrayList<>();
long num = (long) 0;
for (int i = 0; i < 15; i++) {//假设数列的个数为15个
String i1 = String.valueOf(i + 1);//将i转换为字符串,目的是在num的基础上乘上10的次幂,以得到下一个数
int len = i1.length();
double temp = Math.pow(10, len);
num = (long) (num * temp + i + 1);
System.out.println(num);
list.add(num);
}
return list;
}
public static void main(String[] args) {
ShuLie1.Num();
}
}
其运行结果如下:
1
12
123
1234
12345
123456
1234567
12345678
123456789
12345678910
1234567891011
123456789101112
12345678910111212
1234567891011121152
9223372036854775807
主要困惑如下:
理论计算时:
当i=11时,temp=100,num=1234567891011*100+11+1=123456789101112;
当i=12时,temp=100,num=123456789101112*100+12+1=12345678910111213;
显然,当i=12时,理论计算结果与实际运行结果不同。曾怀疑过是否是数据类型大小的问题,当将long类型的num改为BigInteger时,结果仍然在i=12时,出现了相同的问题。
小弟断断续续学的Java,基础较差,所以还请各位大牛帮忙解惑,不胜感激,谢谢!!