小算法,关于阶乘数字过大溢出的解决办法
2018-01-10 22:16
288 查看
思路:假设372为一个大数字,18为一个普通int型数字
代码如下:
public class Demo01 {
//求一个数的阶乘,当求一个很大的数的阶乘,会造成数据溢出
//解决办法:让数组解决
public static void main(String[] args) {
int[] arr=new int[100];
arr[arr.length-1]=1;
int n=50;
int flag=-1;
for(int i=1;i<=n;i++){
arr=demo(arr,i);
}
for(int i=0;i<arr.length;i++){
flag++;
if(arr[i]!=0){
break;
}
}
for(int i=flag;i<arr.length;i++){
System.out.print(arr[i]);
}
}
static int[] demo(int[] arr,int num){
for(int i=0;i<arr.length;i++){
arr[i]*=num;//计算每一位
}
//进和留
for(int i=arr.length-1;i>0;i--){
arr[i-1]+=arr[i]/10;
arr[i]=arr[i]%10;
}
return arr;
}
}
代码如下:
public class Demo01 {
//求一个数的阶乘,当求一个很大的数的阶乘,会造成数据溢出
//解决办法:让数组解决
public static void main(String[] args) {
int[] arr=new int[100];
arr[arr.length-1]=1;
int n=50;
int flag=-1;
for(int i=1;i<=n;i++){
arr=demo(arr,i);
}
for(int i=0;i<arr.length;i++){
flag++;
if(arr[i]!=0){
break;
}
}
for(int i=flag;i<arr.length;i++){
System.out.print(arr[i]);
}
}
static int[] demo(int[] arr,int num){
for(int i=0;i<arr.length;i++){
arr[i]*=num;//计算每一位
}
//进和留
for(int i=arr.length-1;i>0;i--){
arr[i-1]+=arr[i]/10;
arr[i]=arr[i]%10;
}
return arr;
}
}
相关文章推荐
- 关于Oracle将小于1的数字to_char后丢掉0的解决办法
- 关于Oracle将小于1的数字to_char后丢掉小数点前0的解决办法
- 关于表格中td文本溢出的解决办法......
- 关于数据量过大,且SQL已经不能再优化的视图的解决办法(一)
- 关于数据量过大,且SQL已经不能再优化的视图的解决办法(二)
- 关于eclipse环境下堆空间溢出的错误解决办法
- 关于IE7/IE8兼容性视图模型下网页显示不正常,错误信息: 缺少标识符、字符串或数字的解决办法
- 【转】关于Oracle将小于1的数字to_char后丢掉0的解决办法
- java.sql.SQLException: 数字溢出 的解决办法
- n的阶乘会溢出?解决超大数字阶乘溢出问题。
- 关于从Excel导入到SQL Server 2000里表头及数字丢失的解决办法
- 关于任意数字类型的数组求最大值解决办法
- 关于Oracle将小于1的数字to_char后丢掉0的解决办法
- 关于Oracle将小于1的数字to_char后丢掉0的解决办法
- 关于ReportViewer报表数字显示为科学计数法的解决办法(笔记)
- 数组方法关于任意数字类型的数组求最大值解决办法
- 关于堆空间溢出的错误解决办法
- 关于solaris中 crontab -e 出现数字0的解决办法
- android中关于scrollview内部组件android:layout_height="fill_parent"无效的解决办法
- iphone 浏览器自动解析数字为号码解决办法