为了账号安全,请及时绑定邮箱和手机立即绑定

算m(1~1000)的阶乘时,当m>30时结果不正确

算m(1~1000)的阶乘时,当m>30时结果不正确

算法困难户 2017-02-12 09:39:00
 public static void factor(int m)     {      int[] A = {1};      for(int i = 1; i < m; i++)      {      A = helper(A, i+1);      }      for(int i = A.length - 1; i >= 0; i--)      {      System.out.print(A[i]);      }     }     public static int[] helper(int[] s, int a)//计算一个数组s乘以m的值,比如120 * 6的值,s为[0, 2, 1],m为6     {      int i,temp = 0;      int[] arr = new int[(s[s.length - 1] * a + "").length() - 1 + s.length];//本次计算的结果长度      for(i = 0; i < s.length; i++)      {      arr[i] = (s[i] * a + temp) % 10;//加上前一次的十进位数      if(s[i] * a + temp >= 10)      temp = (s[i] * a + temp) / 10;      else      temp = 0;      }      if(temp != 0)//计算出最高位的数超出一位,要进行增加位数      {      for(int j = 0; j < arr.length - s.length; j++)//本次计算数比前次多的位数      {      arr[i+j]=temp % 10;//把多出的其中一位数存放在新数组中,最后返回至result[]中,i代表目前数组的最高数      if(temp >= 10)      temp /= 10;//放在本循环的j++循环止中进行      else      temp = 0;      }      }      return arr;     }
查看完整描述

5 回答

?
习惯受伤

TA贡献885条经验 获得超1144个赞

因为数字太大了,溢出了。你用long型或者double类型。
查看完整回答
1 反对 回复 2017-02-12
?
qq_浮梦壹生_03287462

TA贡献24条经验 获得超10个赞

你这是计算阶乘的代码?我看着不像啊。

查看完整回答
反对 回复 2017-02-13
点击展开后面1
?
qq_浮梦壹生_03287462

TA贡献24条经验 获得超10个赞

你这是计算阶层的代码?我看着不像啊。

查看完整回答
反对 回复 2017-02-13
?
算法困难户

TA贡献2条经验 获得超0个赞

第16行计算位数的代码不对,没有考虑到当前最高位后面的数与阶乘数相乘所产生的进制问题

查看完整回答
反对 回复 2017-02-13
?
青春无极限7

TA贡献1条经验 获得超0个赞

用到大整数了,因为阶乘得到的结果位数太多,一般的无法得到正确结果
查看完整回答
反对 回复 2017-02-12
  • 5 回答
  • 0 关注
  • 1373 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信