java计算8+88+888+8888+.....前十项之和,请问怎么更改这个X为整数型再去相加减啊,求问各位大佬!!!

我自己可能写的有问题,我也不知道,但是是这个题目就是了。。

错误一:首先char类型无法用 Integer.parseInt( )转换。不管是parseInt( )还是valueOf( ) 里面都是放String 类型的数据。

错误二:char a=0;这是个错误写法。权且认为它是对的,往下看,

错误三:在你的方法中 a 的值没有变过。在第一层循环中 x 永远等于 a+'8' ,进入第二层循环十次,那就是 8+8+8+8+8+8+8+8+8+8,外层再循环十次。权且认为都没问题,那么结果可能只是800.

隐藏错误四:int类型取值范围是 -2147483648~2147483647 ,当第十次循环 8888888888(十个8)已经不再int取值范围内,会报错。

修改后的写法:

@Test

public void test() {

BigInteger sum = new BigInteger("0");

String x = "";

for (int i = 0; i < 10; i++) {

x += '8';

// System.out.println(x);

sum = new BigInteger(x).add(sum);

}

System.out.println(sum);

}

追问

还在吗?我想问下在java的某个代码中求出了X,我怎么输出满足条件且最小的那个X呢?

追答

如果满足条件的数字有很多,是个数组,那么将数组排序,就可以输出最小的那个x了。
或者直接将满足条件的数字和上一个满足条件的做对比,保留最小的。当循环结束,你得到那个X就是最小的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-09-14
因为 第 10 个元素 8,888,888,888 转换成 16 进制已经用到了 bit33,超过了 Int 型的范围。它们的和更是超过了 Int 型的范围。
所以,你应该把变量 sum 申明为 Long 型的才能正常使用。
第2个回答  2019-09-14
一般是

long sum=0;
for(int i=0;i<10;i++)
sum+=sum*10+8;

象上面那样的写是不行的,即使是也字符串拼接,也类似于
long sum=0;
String s="";
for(int i=0;i<10;i++)
{
s+="8";
sum+=Long.parseLong(s);
}