C++循环结构——[J]n的阶乘尾部有多少个连续的0

题目描述

编程输入n(n<=100000),求n的阶乘值(n!)尾部有多少个连续的0。

输入

一个整数n.

输出

一个整数

样例

输入

10

输出

2

 参考代码:

 第一次代码,在编译器运行没任何问题,但是在OJ平台报错,显示运行时间超过限制

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,count=0;
	long long num=1;
	cin>>n;
	for(int i=2;i<=n;i++)
		num *=i;
	while(num%10==0)
	{
		count++;
		num /=10;
	}
	cout<<count;
	return 0;
}

继续修改优化代码中……还是存在问题,OJ报错,只通过25%测试

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int n,count=0;
	long long num=1;
	cin>>n;
	for(int i=2;i<=n;i++)
		num *=i;
//	string strNum=format("{}", num);
	stringstream ss;  
    ss << num;  
    string strNum = ss.str();  
	for(int j=strNum.length()-1;j>=0;j--)
	{
		if(strNum[j]=='0')
		{
			count++;
		}
		else break;
	}
	cout<<count;
	return 0;
}

最后才发现题目里数据范围很大,最大是10000,阶乘数已经超过long long的数据范围了,所以解题思路从一开始就是错误。

下面是一个超级详细的分析博客连接:C\C++求N的阶乘!的值中末尾0的个数实践小记_c\c++求n的阶乘!的值中末尾0的个数实践小记-CSDN博客

最后代码:(成功通过OJ测试)

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int N;                      
    int sum = 0; 
    scanf("%d", &N);          // 输入N
    for(int i = 1; i <= N; i++)
    {
        int j = i;
        while(0 == j % 5)
        {
            sum++;            // 统计公约数5出现的频次
            j /= 5;
        }
    }
	cout<<sum;
	return 0;
}

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值