首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java面试 >

求n的阶乘值(n!)尾部有多少个接续的0

2012-12-14 
求n的阶乘值(n!)尾部有多少个连续的0String b+afor(int i0ib.length()i++){if(ib.length()-1){if

求n的阶乘值(n!)尾部有多少个连续的0

String b=""+a;
for(int i=0;i<b.length();i++)
{
if(i<b.length()-1)
{
if(b.charAt(i)=='0'&&b.charAt(i+1)=='0')
{
total++;
}
}
}
System.out.print(total);

只输出1~
[最优解释]
这就是不从1算起,那好办,输入两个数,把计算阶乘的代码改一下.
import java.util.Scanner;
import java.math.BigInteger;
public class Cal0atEndsByBigInteger1
{
public static void main(String[] args) 
{
        // TODO Auto-generated method stub
Scanner rd=new Scanner(System.in);
int total=0;
System.out.println("请输入起始数:");
int n=rd.nextInt();
int m;
do
{
System.out.println("请输入截止数:");
m=rd.nextInt();
}while(m<n);

String product=multiplyNM(n,m);

int length=product.length();
for(int i=0;i<product.length();i++)
{
char c=product.charAt(length-i-1);
if(c!='0')
{
break;
}
else
{
total++;
}
}
System.out.print(n+" 到"+m+" 连乘 = "+product+" 后面有"0"  "+total+" 个");
}
//用大数字计算阶乘,并返回字符串
//
public static String multiplyNM(int n,int m)//返回字符串
{
BigInteger sum=new BigInteger("1");
for(int i=n;i<=m;i++)
{
sum=sum.multiply(new BigInteger(""+i));
}
return sum.toString();
}
}

[其他解释]
这是什么意思 你这个不是统计支付串中零的个数的么
[其他解释]

public static int cal1(long y)
{
String s=""+y;
int length=s.length();
int total=0;
for(int i=0;i<length;i++)
{
char c=s.charAt(length-i-1);
if(c!='0')
{
break;
}
else
{
total++;
}
}
return total;
}

[其他解释]
引用:
Java code?



1234567891011121314151617181920

public static int cal1(long y) {     String s=""+y;     int length=s.length();     int total=0;     for(int i=0;i<length;i++)     {         char c=……

不行,你看看什么问题
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner rd=new Scanner(System.in);
int total=0;
int n=rd.nextInt();
int a=Factorial(n);
String b=""+a;
int length=b.length();
for(int i=0;i<b.length();i++)
{
char c=b.charAt(length-i-1);
if(c!='0')
{
break;
}
else
total++;
}
System.out.print(total);
}
public static int Factorial(int n)
{
int sum=1;
for(int i=1;i<=n;i++)
{
sum*=i;
}
return sum;
}


[其他解释]
方法没问题,就是到13!就溢出了。
改成用BigInteger吧。
public static void main(String[] args) 
{
        // TODO Auto-generated method stub
Scanner rd=new Scanner(System.in);
int total=0;
int n=rd.nextInt();
String b = factorial(n);//java 方法名第一个字母小写。
int length=b.length();
for(int i=0;i<b.length();i++)
{
char c=b.charAt(length-i-1);
if(c!='0')
{
break;
}
else
total++;
}
System.out.print("n!="+b+"后面有"0"  "+total);
}
//用大数字计算阶乘,并返回字符串
//
public static String factorial(int n)//返回字符串
{
BigInteger sum=new BigInteger("1");
for(int i=1;i<=n;i++)
{
sum=sum.multiply(new BigInteger(""+i));
}
return sum.toString();
}

[其他解释]
需要引入包:import java.math.BigInteger;
[其他解释]
引用:
方法没问题,就是到13!就溢出了。
改成用BigInteger吧。


Java code?



12345678910111213141516171819202122232425262728293031

    public static void main(String[] args)      {             // TODO Auto-generated ……

谢谢,用long的话可以吗?还没接触过BigInteger~学习了!
[其他解释]
引用:
需要引入包:import java.math.BigInteger;

这个求a-b的阶乘
样例输入
1 10
样例输出
2
提示




数据范围:



1<=a<=b<=10^6
应该用什么类型才适合?刚我用big的 提交就说时间超限了
[其他解释]
long 型计算到21! 就又溢出了。
7楼说的意思每看明白。
[其他解释]
引用:
long 型计算到21! 就又溢出了。
7楼说的意思每看明白。

计算从a到b所有整数的乘积
数据范围:



1<=a<=b<=10^6

热点排行