解决万恶的大数问题


由于电脑的智商有限啊 我的智商是没问题的
呵呵 大数问题一直困扰着我 不只是我阿 身边的同学作acm的问题 也一直有大树问题  呵呵

其实 java中早就有现成的解决方法了的
在java的math的包下面有BigInteger和BigDecimal两个类 可以用来解决部分大数问题 而且相当之精确

这里 从数据结构的角度出发  一维数组也可以解决大数问题

如下

# /**   
#  * ***********CopyRight**************   
#  *-------Powered by QianXunNet-----   
#  *-----Version 1.1   2009-01-22-----    
#  *-----   Design BY  NiChao    -----   
#  *^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   
#  */ 
package array;
import java.util.*;
public class nc030 {

   
    public static void main(String[] args) throws Exception {   
        // TODO Auto-generated method stub

        int[] date=new int[100];        //可以存放40个数字
        date[1]=1;
        int weishu=1;                     //求出来的值得位数
       
        System.out.println("------用数组解决大数问题---------");
        System.out.println("检验对象:求n!的值");
        System.out.println("input the n=");
       
        Scanner cin=new Scanner(System.in);
       
        int n=cin.nextInt();
         int i=1;
        for(i=1; i<=n;i++){
            for(int j=1;j<=weishu;j++)
                   date[j]=date[j]*i;
            for(int j=1;j<=weishu;j++ )
            {
                if(date[j]>=10)    // 原本此处及下面无等号 多谢好心的网友把我的程                                   //序测试了几组数据,我才回过头来检查谢谢了。
                    for(int r=1;r<=weishu;r++)
                    {
                        if(date[weishu]>=10)
                            weishu++;
                        date[r+1]=date[r+1]+date[r]/10;    //这里有很多次在做无用功  值得改进 
                        date[r]=date[r]%10;
                    }
            }
        }
       
        System.out.print(i-1+"!= ");
        for(int k=weishu;k>=1;k--)
        {
            System.out.print(date[k]);
        }
        System.out.println("");
       
    }

}


运行结果如下
------用数组解决大数问题---------
检验对象:求n!的值
input the n=
35
35!= 10333147966386144929666651337523200000000

你可能感兴趣的:(数据结构,算法,J#)