游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1441|回复: 0

大数阶乘的J2ME代码wxh zt

[复制链接]

1367

主题

1993

帖子

2118

积分

金牌会员

Rank: 6Rank: 6

积分
2118
发表于 2005-10-13 15:13:00 | 显示全部楼层 |阅读模式
大数阶乘,因为其最后结果通常为几十位甚至上百上千位,因为如果用普通的递归算法来做,肯定会出现溢出,在这里,我给出一段大数阶乘的算法代码,以供参考。

仓促写的,算法肯定不够好,现在算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=0;
    else
    sum=1;
    sumTen=0;
    sumG=0;
    sumB=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*a/10;
      sumG=sum*a%10;
    }
    for(int i=0;i<=length+1;i++)
    {
     sumG[i+1]+=sumG/10;
     sumG%=10;
    }
    /*对十位处理*/
    for(int i=length;i>=0;i--)
    {
     sumTen[i+2]+=sum*b/10;
     sumTen[i+1]=sum*b%10;
    }
    for(int i=0;i<=length+2;i++)
    {
     sumTen[i+1]+=sumTen/10;
     sumTen%=10;
    }   
    /*对百位进行处理*/
    for(int i=length;i>=0;i--)
    {
     sumB[i+3]+=sum*c/10;
     sumB[i+2]=sum*c%10;
    }
    for(int i=0;i<=length+3;i++)
    {
     sumB[i+1]+=sumTen/10;
     sumB%=10;
    }
    /*结果相加*/   
    for(int i=0;i<=length+3;i++)
    {
     sum=sumG+sumTen+sumB;
    }
    for(int i=0;i<=length+3;i++)
    {
     sum[i+1]+=sum/10;
     sum%=10;
    }
   }      
   int i;
   g.setColor(0);
   g.fillRect(0,0,getWidth(),getHeight());
   g.setColor(0xffffff);
   for(i=399;i>=0;i--)
   {
    if(sum!=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){
  
}
}


载自:daojianxiao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-28 03:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表