计算 1!+2!+3!+…+100!。要求使用嵌套循环。

当i循环到100计算时,最后的输出结果变成负的了,该怎么办

应为item 和sum超过了int 和long的精度范围了,可以改用大精度数据类型biginteger bigdecimal。

BigDecimal item;
int i,j;
BigDecimal sum=new BigDecimal("0");
for(i=1;i<=100;i++){
item=BigDecimal.valueOf(i);
for(j=1;j<i;j++){
item=item.multiply(BigDecimal.valueOf(j));
}
sum=sum.add(item);
}
printf(sum);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-04-12
标准的整数类型最多只能存储大概20位以内的整数,然而100阶乘有157位,标准的数据类型都不支持,必须自定义大数类。追问

具体方法,代码怎么写,能说一下吗

追答

嗯,我们简单点说好了,就是用整数数组分段存储一个比较长的数字,
比如12,345,678,901,234,567,890,我们可以规定每6位分一段,用数组存储的形式就是a[0]=567890, a[1]=901234, a[2]=345678, a[3]=12, 然后加法乘法也都是对数组计算,只是要考虑进位的问题。基本上就是模拟人的手算的过程。

追问

其实我并没看懂,然后那个我看别的楼层有回答用biginteger的,这个怎么用,我用Vs,好像没法用这个类型

追答

biginteger是java的类型,c语言要使用这个类型要么从网上搜其他人的代码使用,要么自己写代码实现。

本回答被提问者采纳
第2个回答  2015-11-23
可以选择输出无符号型 %u 能去掉符号 你确定数字对的话追问

就是1-100的阶乘相加,只有%u一种方式吗,没法改变数据类型吗?

第3个回答  2015-11-23
biginteger追问

怎么用

追答

新建个biginteger

追问

新建?

相似回答