黑马程序员技术交流社区
标题: 算法题 [打印本页]
作者: xiewen 时间: 2013-6-10 15:40
标题: 算法题
本帖最后由 xiewen 于 2013-6-13 19:40 编辑
写一个程序 ,打印出100的阶乘(即1*2*3*…*100)。
作者: 燃灯街 时间: 2013-6-10 17:33
你好,可以自己先定义一个递归算法,
int func(int i)
{
if(i==0)
return 1;
else
return i*func(i-1);
在main函数中调用System.out.println(func(100));
}
作者: 逝者轨迹 时间: 2013-6-10 17:41
用BigInteger试一下看看,数据太大
作者: 张歆明 时间: 2013-6-10 17:45
循环 和 递归 都行 只能选一个 因为 阶乘没有像前N项和有通项公式 所以 不能直接算
作者: chouwayメ 时间: 2013-6-10 18:43
本帖最后由 chouwayメ 于 2013-6-11 02:06 编辑
- <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>
复制代码 表示细节很重要,在最后输出时候。。。
作者: xiewen 时间: 2013-6-10 19:55
好,谢谢!
作者: xiewen 时间: 2013-6-10 19:55
你的我看不懂!
作者: chouwayメ 时间: 2013-6-10 20:19
一个数超大时,就只能用多个变量值组成的字符串来记录这个大数。 主要是这个比较麻烦!
比如a[0]它可以记0到99999的数 那么a[1] a[0]就可以记99999 99999 的数。
一个大数乘以一个因数,就变成上面的算法了。
作者: 十字路口 时间: 2013-6-10 22:54
public static void main(String[] args) {
double sum=1;
for(int i=1;i<=100;i++){
sum*=i;
}
System.out.println(sum);
}数据太大了,我用了double类型。最后结果为:9.33262154439441E157
。你看看是不是你要的结果呢。
作者: 袁梦希 时间: 2013-6-12 19:12
楼主你好 如果问题已经解决 请把帖子的类型改为已解决 然后会给你发几个粽子吃
作者: 袁梦希 时间: 2013-6-12 19:12
很厉害 哥们
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |