怎样计算171!( 三 )
這個程序運行後的輸出結果是:1241018070217667823424840524103103992616605577501693185388951803611996075221691752992751978120487585576464959501670387052809889858690710767331242032218484364310473577889968548278290754541561964852153468318044293239598173696899657235903947616152278558180061176365108428800000000000000000000000000000000000000000希望可以供你參考。我自己測試了一下。設定最長2000位數的話,可以計算到808的階乘,結果都是正確的。如果,只追求計算到171的階乘,310位數就足夠。
■网友
在写程序时经常会遇到数据溢出的情况,也就是程序运行产生的结果超过了变量的数据类型所能保存的最大数值的极限。这样就会导致有些需求因为数值过大而无法满足。在java编程语言中最大的整数类型变量为long,可以表示的最大正整数为922 3372 0368 5477 5807。最大只能表示21!,当然这里的21!是准确数值。如果采用double类型的数据则最大可以表示大约1.79769313486231570E10^308,这样最大可以表示170!,但由于double类型的数据是浮点数,故误差较大。而171!使用任何基本数据类型都无能为力了。现在就来研究一下怎样计算出171!的准确数值。为了数据不会溢出,这里采用数组来保存数据。
观察各个数据的阶乘,
1!=1
2!=1*2=1+1=2
3!=1*2*3=2+2+2=6
4!=1*2*3*4=6+6+6+6=24
5!=1*2*3*4*5=24+24+24+24+24=120
………………………………………………………
……………………………………………………………
…………………………………………………………………
很明显,
171!=170!+170!+170!+170!+………………+170!,总共171个170!相加。
170!=169!+169!+169!+169!+………………+169!,总共170个169!相加。
169!=168!+168!+168!+168!+………………+168!,总共169个168!相加。
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
4!=3!+3!+3!+3!,总共4个3!相加。
3!=2!+2!+2!,总共3个2!相加。
2!=1!+1!,总共2个1!相加。
那么,171!就是170!加另一个自己170次,以此类推,最终需要计算的就是1!。也就是连续的不停的做加法运算。这里使用数组来模拟数据,数组的每一项就是真实数据的其中一位。也就是说每个数组元素中储存的值可能是0,1,2,3,4,5,6,7,8,9这10个数字中的其中一个。在做加法运算时可能导致某数组元素中的值大于9(可能为10,11,12,13,14,15,16,17,18之中的一个),出现不能成功模拟真实数字其中一位的这种情况。故每一小步做加法运算后都需要进行“进位”操作。如果某一项数组元素中的值大于9,则将该值减去10,往旁边(高一位)的数据中+1,减10后的值保存在该数组元素中。
实际操作的原理应该是数组的第一项arr=1,即第一项等于1!,然后第一项加自己1次,得出的结果加自己2次,再一次得出的结果加自己3次……以此类推,直到170!加自己170次(即171个170!的和)即可得到171!。
//本人是java小白,以下是我写的代码,但是什么都算不出来,求大神指点
import java.util.*;
public class daShuJieCheng {
\tpublic static void main(String args) {
\t\tSystem.out.println("请输入要计算阶乘的数字:");
\t\tScanner scanner = new Scanner(http://System.in);
【怎样计算171!】 \t\tint a = scanner.nextInt();
\t\tint b = a * 7;
\t\tint arr1 = new int;// 用来储存中间变量
推荐阅读
- 聪明人养花,这3种“花”怎样也要养一盆,每年能省不少医药费
- 互联网怎样解决“家政服务上门速度慢”的问题
- 怎样看待从1月8号起,QQ钱包开始提现收费
- 银行it人怎样转型
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 怎样进入通信行业
- 怎样评价扶他柠檬茶的小说《云养汉》的结尾
- 有啥方法,网站,项目可以自己练习计算广告学
- 怎样成为一名合格的Python程序员?
- 怎样评价华为、诺基亚、中兴中标中国移动高端路由交换设备扩容集采
