怎样计算171!( 二 )
@圓月亮 的做法非常赞,简单明了。我在我的机器上大致比较了一下速度(数字都是大约。。):计算171!,BigDecimal、圓月亮、上面这个算法分别用时(毫秒):\u0026lt;10、200、60.计算800!,还是这个顺序,用时分别为:20、5000、600.计算7000!,分别是:卒(StackOverflowError)、没挂,但是几分钟了出不来结果我要去吃饭了!!!、50000效果大致是这样的:
7000!结果应该是这个样子的,但愿没错,都没正确的给我参考.......
百度找到的一个实现挺不错的,你也可以参考一下这个:http://www.open-open.com/home/space-135360-do-blog-id-9620.html宝宝只能帮到这里了.....啊啊啊,我该去吃饭了~~~~
■网友
按你的要求,不使用 Java 自帶的 BigInteger 及 BigDecimal,而是用數組模擬加法,我簡單快速的寫了一個小程序,肯定有很多缺陷和不足,但是,你要求的計算171的階乘,可以實現。程序如下:public class Example { // 非常簡陋的用於大整數加法的類 static class PoorBigInteger { // 簡單地決定最大位數2000位,未考慮位數更多的情況 private static final int MAX_LENGTH = 2000; // 保存每一位數的值 // 個位是在 digits // 十位是在 digits // 百位是在 digits // 以此類推 private final byte digits; // 所有位上的數初始為0 public PoorBigInteger() { this.digits = new byte ; for ( int i = 0; i \u0026lt; MAX_LENGTH; ++i ) { this.digits = 0; } } // 所有位上的數初始為0,再使用參數 value 的值初始化 // 未考慮 value 為負數的情況 public PoorBigInteger( int value ) { this(); int digitsNumber = String.valueOf( value ).length(); for ( int i = 0; i \u0026lt; digitsNumber; ++i ) { this.digits = (byte) ( value % 10 ); value = https://www.zhihu.com/api/v4/questions/41597487/value / 10; } } // 加法運算 // 簡單粗暴,僅追求實現功能 // 未優化,未考慮有效位數,也沒有處理最高位 public final void add( PoorBigInteger addend ) { for ( int i = MAX_LENGTH - 1; i /u0026gt; 0; --i ) { int sum = this.digits + addend.digits; this.digits = (byte) ( sum % 10 ); this.digits += (byte) ( sum / 10 ); } } public final String toString() { String s =""; boolean significant = false; for ( int i = 0; i \u0026lt; MAX_LENGTH; ++i ) { byte digit = this.digits; if ( significant == false \u0026amp;\u0026amp; digit \u0026gt; 0 ) { significant = true; } s += significant ? this.digits : ""; } return s; } } public static void main( String args ) { // 因為需要算171的階乘,所以準備172個 // 第0個忽略不用 // 第1個保存1的階乘,第2個保存2的階乘?? PoorBigInteger factorials = new PoorBigInteger ; for ( int i = 0; i \u0026lt; factorials.length; ++i ) { factorials = new PoorBigInteger(); } // 手工存入1的階乘 factorials = new PoorBigInteger( 1 ); // 循環計算2及其後每個數的階乘 for ( int i = 2; i \u0026lt; factorials.length; ++i ) { for ( int j = 0; j \u0026lt; i; ++j ) { factorials.add( factorials ); } } // 輸出171的階乘 System.out.println( factorials ); }}
推荐阅读
- 聪明人养花,这3种“花”怎样也要养一盆,每年能省不少医药费
- 互联网怎样解决“家政服务上门速度慢”的问题
- 怎样看待从1月8号起,QQ钱包开始提现收费
- 银行it人怎样转型
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 怎样进入通信行业
- 怎样评价扶他柠檬茶的小说《云养汉》的结尾
- 有啥方法,网站,项目可以自己练习计算广告学
- 怎样成为一名合格的Python程序员?
- 怎样评价华为、诺基亚、中兴中标中国移动高端路由交换设备扩容集采
