永中首页 | 产品聚焦 | 销售渠道 | 服务支持 | 教育专栏 | 二次开发 | 在线订购 | 产品注册 | 免费下载 | 新闻中心 | 关于永中
发新话题
打印

给大家做一个经典老题

给大家做一个经典老题

给大家做一个经典老题
     计算1000的阶乘,不能用java中的大数。(java的BigInteger这个类)请大家实际做一下,必有所得! 谁做完了请把源程序贴上来。
永中科技开发工程师之一。

TOP

给大家做一个经典老题

我是二期班的学员,接触JAVA才一个星期,因此经验不足!
我的思路是既然double不能满足1000!的长度,那我先取小数
既取m=1/1000!,在这里只要调用调节double精度的类,就可以
得到一个小数。在完成循环后取string n=1/m,将数值的每个数
定义成一个字符串或数组,在数组中输出。
不知这样行不行,如果可以的话,我有两个难题。
一是调节double精度的类;二能不能将double类型强制转换成String类型!
请多赐教!!!!!

TOP

给大家做一个经典老题

写个第归调用
public double compute(int n)
{
   return n*compute(n-1);
}
为人民服务!!!!!!!!!!!!!!!!!!!!

TOP

给大家做一个经典老题

不对!
永中科技开发工程师之一。

TOP

给大家做一个经典老题

想不起来啊
这么大的数??
能不能给点提示啊?
在 java中迷茫

TOP

给大家做一个经典老题

写个第归调用 ,怎么不对啊!!!
public double compute(int n)
{
if(n>=2)
   
  return n*compute(n-1);
}
为人民服务!!!!!!!!!!!!!!!!!!!!

TOP

给大家做一个经典老题

请楼主给一点简单的提示好吗?

TOP

给大家做一个经典老题

[这个贴子最后由透明在 2002/12/23 07:08am 编辑]

刚做的,用一个数组来存放.
import java.awt.* ;
import javax.swing.* ;
import javax.swing.event.* ;
import java.text.* ;
import java.lang.* ;
public class Cheng
{
    private long[] a ;
    private long  c ;
    private int m = 0 ;
    private int  n, d;
    private int y = 0 ;
    private DecimalFormat myFormatter ;
   
    /** Creates a new instance of Cheng */
    public Cheng ()
    {
        myFormatter = new DecimalFormat("0000") ;
        a = new long[30000] ;
        a[0] = 1 ;
    }
    public void result()
    {
        String s ;
        s = JOptionPane.showInputDialog (null,"please input number") ;
        n = Integer.valueOf (s).intValue () ;
        for (int i = 1 ; i <= n ; i++)
        {
            c = 0 ;
            for (int j = y ; j <= m; j++)
            {
                              
                a[j] = a[j] * i + c ;
               
                c = a[j] / 10000 ;
               
                if (a[j]%10000==0&&j==y)
                {
                    y++ ;
                    a[j] = 0 ;
                    continue ;
                 }
                    a[j] = a[j] % 10000 ;
            }
            if (c > 0)
            {
                m++ ;
                a[m] = c ;
            }
        }
        System.out.print(a[m]);        
        for (int p = m -1 ; p >= y ; p--)
        {
            String output = myFormatter.format(a[p]) ;
            if ( p % 30 == 1)
            {
                System.out.println();
            }
                System.out.print(output);
         }
        for (int i = 0 ; i < y ; i++)
        {
            if ( i % 30 == 1)
            {
                System.out.println();
            }
            System.out.print("0000");
        }
        System.out.println();
        if (a[m] / 1000 > 0)
            d = 4 ;
        else if (a[m] /100 > 0)
            d = 3 ;
        else if (a[m] /10 > 0)
            d = 2 ;
        else
            d = 1 ;
        
        int w = m * 4 + d ;
        System.out.println(n+"!为" +w +"位");
    }
   
    public static void main (String[] args)
    {
        Cheng ar = new Cheng() ;
        ar.result () ;
        System.exit(0) ;
    }
}
[font=新宋体 color=blue size=4][move]行到水穷处 坐看云起时[/move][/FONT]

TOP

给大家做一个经典老题

请斑竹把正确答案共享啊,让我看看把
为人民服务!!!!!!!!!!!!!!!!!!!!

TOP

给大家做一个经典老题

我两年半多前来永中时参加考试用java写过一个计算1000的阶乘程序(没用java的BigInteger这个类),后来用它算10000的阶乘大约要4秒钟。比用c++写的一点不差。

TOP

给大家做一个经典老题

说明: 当时永中的计算机都是 奔3  667MHz  128M 内存 ,在现在2G的计算机上应该只要1.3秒左右就可算完。
那时我在网上看到有个人用c++写的计算器里有这个功能,它的计算速度比我的慢大约1/3。我就email问他是怎么做的,他还很神秘地不肯透露,当然他不知道我的比他快。我认为是他算法上有点问题。

TOP

发新话题