WAP之家:为您提供最全最新的WAP技术,CP.SP.3G等行业资讯。 WAP之家交流论坛全新开放 点击进入>>
WAP资讯 | 3G动态 | SP动态 | 运营商动态 | 内容商动态 | 制造商动态 | 论坛讨论>> 每次自动访问
WAP技术 | WAP源码 | 手机编程 | 手机源码 | 无线技术 | J2ME技术 | 手机软件 添加到收藏夹
IVR技术 | SP资料 | SMS MMS技术 | 商业方案 | IVR下载 | 书籍教程 | 工具软件 语言:繁體中文

WAP之家技术文章J2ME技术程序开发大数阶乘的J2ME代码

大数阶乘的J2ME代码
作者:daojianxiao  来源:转载  发布时间:2005-10-15 1:40:46

大数阶乘,因为其最后结果通常为几十位甚至上百上千位,因为如果用普通的递归算法来做,肯定会出现溢出,在这里,我给出一段大数阶乘的算法代码,以供参考。

仓促写的,算法肯定不够好,现在算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){

}
}

载自:daojianxiao

[] [返回上一页] [打 印]
文章评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码