黑马程序员技术交流社区
标题:
1000的阶乘所有零和尾部零的个数,不用递归做
[打印本页]
作者:
javaeea
时间:
2015-9-30 19:25
标题:
1000的阶乘所有零和尾部零的个数,不用递归做
/**
* @param args
* 需求:求出1000的阶乘所有零和尾部零的个数,不用递归做
*/public static void multiply(){
//int multiply = 1;
BigInteger multiply = new BigInteger("1");
for(int i=1;i<=1000;i++){
multiply = multiply.multiply(new BigInteger(i+""));
}
System.out.println(multiply);
String str = multiply.toString();
StringBuilder sb = new StringBuilder(str);
str = sb.reverse().toString();
int count = 0;
for(int i=0;i<str.length();i++){
if('0'==str.charAt(i)){
count++;
}else{
break;
}
}
System.out.println(count);
}
作者:
朦胧色彩
时间:
2015-9-30 20:14
class Test
{
public static void main(String[] args)
{
//求1000!,就是1*2*3*4*5*....*1000
int[] arr = new int[1000000];// 存储1000!的结果,我想1000000位足够了吧
arr[1] = 1;
int numindex = 1;// 求出来值的是多少位数
for(int i = 1; i <= 1000; i++)
{
for(int j = 1; j <= numindex; j++)
arr[j] *= i;
// 判断每一位是不是大于等于10,是的话往前就进1
for(int k = 1; k < numindex; k++)
if(arr[k] >= 10)
{
arr[k+1] += arr[k] / 10;
arr[k] %= 10;
}
// 最高位也不得>=10
while(arr[numindex] >= 10)
{
arr[numindex + 1] += arr[numindex] / 10;
arr[numindex] %= 10;
numindex++;
}
}
int counts = 0;
// 从最高位往后打,判断如果是0就+1
for (int k = numindex; k >= 1; k--) {
if(arr[k]==0)
counts++;
}
System.out.println("一共有:"+counts+"个零");
int tail = 0;
for(int k = 1; k <= numindex; k++)
{
if(arr[k]==0)
tail++;
else
break;
}
System.out.println("尾部有:"+tail+"个零");
}
}
复制代码
作者:
javaeea
时间:
2015-10-1 10:15
朦胧色彩 发表于 2015-9-30 20:14
6666666666666666666666
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2