解决万恶的大数问题

:arrow:
由于电脑的智商有限啊 我的智商是没问题的
呵呵 大数问题一直困扰着我 不只是我阿 身边的同学作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

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