A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区
传智教育官网黑马程序员官网
只需一步,快速开始
xiewen
中级黑马
黑马币:0
帖子:264
精华:0
© xiewen 中级黑马 / 2013-6-10 15:40 / 1844 人查看 / 10 人回复 / 0 人收藏 转载请遵从CC协议 禁止商业使用本文
查看全部评分
<P> class Factorial { public static void main(String[] args) { StringBuilder sb=new StringBuilder(); int[] lon=new int[100];//一个int值按最多能计5个位的数.最大值99999次方。该数组能记录500位的十进制的数。 lon[0]=1; for(int i=1;i<101;i++){ mul(lon,i); //阶乘 } for(int j=lon.length-1;j>=0;j--){ //从高位添加进字符串,准备打印 if(lon[j]!=0) { // 用正则补满五位。 String tem=Integer.toString(lon[j]).replaceAll("(<A href='file://\\d+)","0000$$$$1'>\\d+)","0000$$$$1</A>");</P> <P> tem=tem.substring(tem.length()-5,tem.length()); sb.append(tem); } else { String tem=Integer.toString(lon[j]).replaceAll("0","00000"); sb.append(tem); } } String str=sb.toString().replaceFirst("0*([1-9])","$$$$1");//把前排是零的去除掉 System.out.println(str+"\r\n"+"位数:"+str.length()); //打印输出 } //大数的乘法,用多个变量记住大数。 public static void mul(int[] a,int b){ int carry=0; //准备进位的数,初始为0 for(int i=0;i<a.length;i++){ a[i]=a[i]*b+carry; //数组的每个数都与因数相乘,且加上进位的数 { carry=a[i]/100000; //当大于99999时,向前进位,当a[i]不大于99999时,进位数归零 a[i]=a[i] %100000; //a[i]截取低位的数 ,只记0-99999的数 } } } }</P>复制代码表示细节很重要,在最后输出时候。。。 QQ图片20130611011004.jpg (20.28 KB, 下载次数: 0) 下载附件 2013-6-11 01:10 上传
QQ图片20130611011004.jpg (20.28 KB, 下载次数: 0)
下载附件
2013-6-11 01:10 上传
逝者轨迹 发表于 2013-6-10 17:41 用BigInteger试一下看看,数据太大
chouwayメ 发表于 2013-6-10 18:43
xiewen 发表于 2013-6-10 19:55 你的我看不懂!
chouwayメ 发表于 2013-6-10 20:19 一个数超大时,就只能用多个变量值组成的字符串来记录这个大数。 主要是这个比较麻烦! 比如a[0]它可以记 ...
有了黑马骑士勋章,比白马王子还要牛!