程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> 大數階乘的J2ME實現

大數階乘的J2ME實現

編輯:J2ME

大數階乘,由於其最後成果通常為幾十位甚至上百上千位,由於假如用普通的遞回算法來做,確定會呈現溢出,在這裡,我給出一段大數階乘的算法代碼,以供參考。

匆促寫的,算法確定不夠好,現在算200的階乘大概要3秒鐘,大家可以參考一下,本文謝謝(大蝦,Tommy,阿土,不是寶貝的幫助)

import Javax.microedition.midlet.*;
import Javax.microedition.lcdui.*;
public class Check extends MIDlet {
    class test extends Canvas
    {
        public test()
        {
        }
        public void paint(Graphics g)
        {
            for(int i=0;i<400;i++)
            {
                if(i!=0)
                    sum[i]=0;
                else
                    sum[i]=1;
                sumTen[i]=0;
                sumG[i]=0;
                sumB[i]=0;
            }
            int j;
            for(j=1;j<=goal;j++)
            {
// System.out.println(j);
                int a=j%10;// 得到個位
                int b=j/10%10;// 得到十位
                int c=j/100;// 得到百位
                int length;
                for(length=399;length>=0;length--)
                {
                    if(sum[length]!=0)
                        break;
                }
                /* 對個位處理 */
                for(int i=length;i>=0;i--)

 {
                    sumG[i+1]+=sum[i]*a/10;
                    sumG[i]=sum[i]*a%10;
                }
                for(int i=0;i<=length+1;i++)
                {
                    sumG[i+1]+=sumG[i]/10;
                    sumG[i]%=10;
                }
                /* 對十位處理 */
                for(int i=length;i>=0;i--)
                {
                    sumTen[i+2]+=sum[i]*b/10;
                    sumTen[i+1]=sum[i]*b%10;
                }
                for(int i=0;i<=length+2;i++)
                {
                    sumTen[i+1]+=sumTen[i]/10;
                    sumTen[i]%=10;
                }
                /* 對百位進行處理 */
                for(int i=length;i>=0;i--)
                {
                    sumB[i+3]+=sum[i]*c/10;
                    sumB[i+2]=sum[i]*c%10;
                }
                for(int i=0;i<=length+3;i++)
                {
                    sumB[i+1]+=sumTen[i]/10;
                    sumB[i]%=10;

    }
                /* 成果相加 */
                for(int i=0;i<=length+3;i++)
                {
                    sum[i]=sumG[i]+sumTen[i]+sumB[i];
                }
                for(int i=0;i<=length+3;i++)
                {
                    sum[i+1]+=sum[i]/10;
                    sum[i]%=10;
                }
            }
            int i;
            g.setColor(0);
            g.fillRect(0,0,getWidth(),getHeight());
            g.setColor(0xffffff);
            for(i=399;i>=0;i--)
            {
                if(sum[i]!=0)
                    break;
            }
// System.out.println("最後成果位數:");
            System.out.println(i);
            for(int m=i;m>=0;m--)
                g.drawString(String.valueOf(sum[m]),getWidth()-13-m%17*10,getHeight()-30-m/17*15,0);

        }
    }
    private Display display;
    test t;
    int goal=100;// 階乘數
    int[] sum=new int[400];
    int[] sumTen=new int[400];
    int[] sumG=new int[400];
    int[] sumB=new int[400];
    public Check()
    {
        display=Display.getDisplay(this);
    }
    public void startApp()
    {
        t=new test();
        display.setCurrent(t);

 }
    public void pauseApp(){

    }
    public void destroyApp(boolean boo){

    }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved