一、问题
当进行三位数或更多的数阶乘运算时,Java已经没有数据类型可以接收。
二、解决方案
以下通过String进行阶乘运算。
/**
* 阶乘运算
*/
public int trailingZeroes(int n) {
String num = "" + n;
while(n > 1)
{
String temp = num;
for (int i = 1; i < n - 1; i++)
{
char[] chars = calculate(num.toCharArray(), temp.toCharArray()).toCharArray();
num = String.valueOf(chars);
}
System.out.println("num : " + num);
n--;
}
int count = 0;
char[] chars = (num + "").toCharArray();
for (int i = chars.length - 1; i > 0; i--) {
if("0".equals(chars[i] + ""))
{
count++;
}else
{
break;
}
}
return count;
}
/**
* 加法运算
*/
public String calculate(char[] m, char[] n) {
int index = n.length - 1;
int[] result = new int[m.length];
for (int i = m.length - 1; i >= 0; i--) {
result[i] = Integer.parseInt(m[i] + "");
if(index >= 0)
{
result[i] = result[i] + Integer.parseInt(n[index] + "");
index--;
}
}
StringBuffer sb = new StringBuffer();
for (int i = result.length - 1; i >= 0; i--) {
if (result[i] >= 10 && i - 1 >= 0) {
result[i - 1] += 1;
result[i] -= 10;
}
if(i - 1 < 0 && result[0] >= 10)
{
char[] chars = (result[0] + "").toCharArray();
sb.append(chars[1]);
sb.append(chars[0]);
}else
{
sb.append(result[i]);
}
}
return sb.reverse().toString();
}