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

eviljordan 2012-11-19 10:53:46
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~
...全文
603 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
eviljordan 2012-11-20
  • 打赏
  • 举报
回复
引用 8 楼 nmyangym 的回复:
long 型计算到21! 就又溢出了。 7楼说的意思每看明白。
计算从a到b所有整数的乘积 数据范围: 1<=a<=b<=10^6
nmyangym 2012-11-20
  • 打赏
  • 举报
回复
long 型计算到21! 就又溢出了。 7楼说的意思每看明白。
eviljordan 2012-11-20
  • 打赏
  • 举报
回复
引用 5 楼 nmyangym 的回复:
需要引入包:import java.math.BigInteger;
这个求a-b的阶乘 样例输入 1 10 样例输出 2 提示 数据范围: 1<=a<=b<=10^6 应该用什么类型才适合?刚我用big的 提交就说时间超限了
eviljordan 2012-11-20
  • 打赏
  • 举报
回复
引用 4 楼 nmyangym 的回复:
方法没问题,就是到13!就溢出了。 改成用BigInteger吧。 Java code? 12345678910111213141516171819202122232425262728293031 public static void main(String[] args) { // TODO Auto-generated ……
? 谢谢,用long的话可以吗?还没接触过BigInteger~学习了!
nmyangym 2012-11-20
  • 打赏
  • 举报
回复
需要引入包:import java.math.BigInteger;
nmyangym 2012-11-20
  • 打赏
  • 举报
回复
方法没问题,就是到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();
	}
eviljordan 2012-11-20
  • 打赏
  • 举报
回复
引用 2 楼 nmyangym 的回复:
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;
	}
nmyangym 2012-11-20
  • 打赏
  • 举报
回复
这就是不从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();
	}
}
nmyangym 2012-11-19
  • 打赏
  • 举报
回复

	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;
	}
zqfddqr 2012-11-19
  • 打赏
  • 举报
回复
这是什么意思 你这个不是统计支付串中零的个数的么

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧